1
当我触发一个click事件,该函数运行:无法流星事件访问变量
'click h2.start1': function() {
var genreName;
//generate random number
function getGenreNumber() {
numGenre = Math.floor((Math.random() * 500) + 1); //total genres: 1381
console.log('genre index number: ' + numGenre);
return numGenre
};
//http.get genre with number genre/list
function getGenreName() {
HTTP.get('someurl',
{},
function (error, result) {
if (result.statusCode === 200) {
genreName = result.data.response.genres[numGenre].name;
console.log('The genre is: ' + genreName);
}
return genreName
});
};
//http.get 15 artists of genre genre/artist
function getGenreArtists() {
console.log('genreName is: ' + genreName); //this is undefined
HTTP.get('someurl' + genreName,
{},
function (error, result) {
if (result.statusCode === 200) {
console.log(result.data.response);
console.log(genreName);
}else {
console.log("something broke");
console.log(genreName); //this is exactly as it should be!
}
});
};
getGenreNumber()
getGenreName()
getGenreArtists()
},
我试图做两件事情,第一,有传递到URL中的变量genreName
的价值功能getGenreArtists
中的GET请求。
getGenreArtists
中的第一个console.log会返回undefined,但行“something broke”下的console.log会正确返回。
我很困惑,因为两个函数都具有相同的范围,并且因为函数getGenreName
能够正确访问变量numGenre
。
我想要做的第二件事是用+
genreName
替换任何空格,这样GET请求的url将被正确格式化。
同意 - 变量genreName由回调getGenreName()试图读取它后置第一次(getGenreArtists func的第2行),但在getGenreArtists中的回调被调用之前。 – JeremyK
为什么我不使用return语句而不是console.log来将字符串传递给url? –
因为这会导致阻塞,直到HTTP请求完成。有了回调方法,你基本上是在它到达结果时做一个动作,但立即返回控制。这在javascript中更常见。 – corvid