我是Node / Javascript的新手,并尝试通过加载其他网址audioLink
来抓取网址songLink
。然后我会将它们添加到新对象rapSong
。为了实现这一点,我使用异步系列,以便调用异步发生。我尝试过其他方法,比如使用异步瀑布和回调没有成功。
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");
});
答案 0 :(得分:0)
在您的第一个async.series
函数中,在调用getAudioLink
的回调之前,您不应该调用其回调。
所以移动<{1}}调用里面的代码回调:
getAudioLink
这样getAudioLink(songLink, function(resp){
audioLink = resp;
console.log("one");
console.log("two");
callback();
});
一直持续到设置async.series
之后。