In der zweiten Funktion im asynchronen Wasserfall, der eachSeries
Rückruf (urlCallback
) in meinem Code nach dem Wasserfall Callback (waterfallCallback
) ausgeführt, aus Gründen, die ich nicht out out kann.Verschachtelte async.eachSeries in Wasserfall wird in falscher Reihenfolge ausgeführt
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 nimmt die async.eachSeries drei Argumente (array, functionToBeExecuteOnEachItem, Callback) und führen sie in dieser Reihenfolge. Irgendwie nicht hier.
Sehr hilfreich. Es sieht jedoch so aus, als würde 'urlCallback (null, itemUrls) 'das Array nicht wie gewünscht zurückgeben. – Erasmus
Gibt 'urlCallback' das angegebene Array nicht im' eachSeries' Callback zurück? – Erasmus
Ah, ja. Ich habe meine Antwort aktualisiert. – clay