当我触发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()
},
我尝试做两件事,首先,将变量genreName
的值传递到函数getGenreArtists
中的GET请求的url中。
getGenreArtists
中的第一个console.log是未定义的,但是行#34下的console.log已经破坏了#34;正确回归。
我感到困惑,因为两个函数都有相同的范围,因为函数getGenreName
能够正确访问变量numGenre
。
我要做的第二件事是用+
中的genreName
替换任何空格,这样GET请求的网址格式就会正确。
答案 0 :(得分:0)
这是一个普通的异步问题。一般来说,如果要对异步事件中的数据执行某些操作,则传递回调(或使用promise)。例如,您的getGenreName
看起来更像是这样:
function getGenreName(callback) {
HTTP.get('someurl', {}. function (error, result) {
if (result.statusCode === 200) {
callback(result.data.response.genres[numGenre].name);
}
});
}
然后这样称呼:
getGenreName(function (name) {
console.log('the name of the genre is: ' + name);
});