Ich glaube, Sie missverstehen, wie async.series
funktioniert funktioniert.
Ihre Funktionen in async.series
callback
nicht annehmen als Argument und sie nennen es nicht. Und diese request(...)
Zeug ist wahrscheinlich überhaupt keine Funktion. Das ist wahrscheinlich der Grund, warum es die asynchrone Schleife unterbricht. Versuchen Sie Folgendes:
async.series(
[
function(callback) { // <--- missing callback
log('starting');
db.connect('mongodb://127.0.0.1:27017/test',
function(err, base){
if(err) throw err;
db = base;
callback(); // <--- missing callback
});
},
function(callback) { // <--- missing function with callback
request(website, function(err,resp,body) {
start(err, resp, body, callback);
})
}
],
function(){
log('closing DB');
db.close();
}
);
Beachten Sie, dass ich callback
hinzugefügt habe Argument beim Aufruf von start
. Daher müssen Sie Ihren Code so umgestalten, dass jede Funktion callback
akzeptiert die am Ende aufgerufen werden kann, wenn Sie wissen, dass alle Jobs erledigt sind. Beispielsweise können Sie async.parallel
hinzufügen innerhalb von start
und diese Funktion könnte so aussehen:
function start(err, resp, body, callback) {
// some stuff happens here
var jobs = []
pageURLS.forEach(function(url, index, array){
jobs.push(function(clb) {
request(url, function(error,response,bodies) {
// some stuff
clb(); // <--- this refers to the local callback for the job
});
});
});
async.parallel(jobs, function() {
// all jobs are done, let's finilize everything
callback();
});
};