Jag tror att du missförstår hur async.series
fungerar.
Dina funktioner i async.series
ta inte callback
som ett argument och de kallar det inte. Och den där request(...)
grejer är förmodligen inte en funktion alls. Det är förmodligen därför den bryter asynkronslingan. Prova detta:
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();
}
);
Observera att jag har lagt till callback
argument när du anropar start
. Därför måste du omstrukturera din kod noggrant så att varje funktion accepterar callback
som kan ringas i slutet när man vet att alla jobb är gjorda. Till exempel kan du lägga till async.parallel
inuti start
och den här funktionen kan se ut så här:
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();
});
};