非同期ウォーターフォールの 2 番目の関数では、コード内のeachSeries
コールバック ( ) がウォーターフォール コールバック ( ) の後に実行されますが、その理由はわかりません。urlCallback
waterfallCallback
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)
})
私の知る限り、async.eachSeries は 3 つの引数 (array,functionToBeExecuteOnEachItem,callback) を受け取り、その順序で実行します。どういうわけかここではありません。