Async.series:函数外部未定义变量
问题描述:
我是新来的Node/Javascript,并试图通过加载另一个url songLink
来获取URL audioLink
。然后,我会将它们添加到一个新对象rapSong
。为了实现这一点,我使用异步系列,以便调用将异步发生。我尝试了其他方法,例如使用异步瀑布和只是回调没有成功。Async.series:函数外部未定义变量
audioLink
是undefined
,除非我在getAudioLink
函数内。此外,async.series中的函数不能以正确的顺序运行。有什么建议?
//for each song..
songLinkElem.each(function(i, s) {
var songName = StringUtils.removeWhiteSpacesAndNewLines($(s).children(".title_with_artists").text());
var songLink = $(s).attr("href");
var audioLink;
async.series([
function(callback){
function getAudioLink(songLink, callback){
request(songLink, function(err,resp,body){
$ = cheerio.load(body);
var audioElem = $(body).find(".audio_link > a");
var audioLink = audioElem.attr("href");
return callback(audioLink);
});
}
getAudioLink(songLink, function(resp){
audioLink = resp;
console.log("one");
})
console.log("two");
callback();
},
function(callback){
var rapSong = new Song(songName, artistLink, songLink, audioLink);
rapArtist.addSong(rapSong);
console.log("three");
callback();
}],
function(err, result){
console.log("four");
});
答
在你的第一个async.series
功能,你不应该调用它的回调,直到getAudioLink
回调被调用。
所以移动遵循内部其回调的getAudioLink
呼叫代码:
getAudioLink(songLink, function(resp){
audioLink = resp;
console.log("one");
console.log("two");
callback();
});
这样的async.series
将不会继续进行,直到audioLink
设置后。