在異步瀑布中的第二個函數中,我的代碼中的eachSeries
回調(urlCallback
)在瀑布回調(waterfallCallback
)後執行,原因我無法理解。在瀑布中嵌套的async.eachSeries按錯誤順序執行
async.waterfall([
function(callback) {
request(website, function (error, response, html) {
if (!error && response.statusCode == 200) {
pageUrls = getPageUrls(html)
callback(null, pageUrls)
}
})
},
function (pageUrls, waterfallCallback) {
async.eachSeries(pageUrls, function (url, urlCallback) {
console.log('SET ' + url)
request(url, function (err, response, body) {
var $ = cheerio.load(body)
$('#div').children().each(function(){
console.log($(this).children("a").attr("href"));
itemUrl = $(this).children("a").attr("href")
itemUrls.push(itemUrl)
})
urlCallback(null,itemUrls)
})
},
waterfallCallback(null, itemUrls))
}
],
function(err, results) {
console.log("results: " + results)
})
AFAIK,所述async.eachSeries有三個參數(數組,functionToBeExecuteOnEachItem,回調)和以該順序執行它們。不知何故不在這裏。
非常有幫助。但是,它看起來像'urlCallback(null,itemUrls)'不會根據需要返回數組。 – Erasmus
'urlCallback'是否在'eachSeries'回調中返回指定的數組? – Erasmus
啊,是的。我已經更新了我的答案。 – clay