Acho que você não entendeu como
async.series funciona. Suas funções em
async.series não aceite callback como um argumento e eles não chamam isso. E esse request(...) stuff provavelmente não é uma função. Provavelmente é por isso que ele quebra o loop assíncrono. Tente isto: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();
}
);
Observe que adicionei
callback argumento ao chamar start . Assim, você terá que refatorar seu código habilmente para que todas as funções aceitem callback que pode ser chamado no final quando você sabe que todos os trabalhos estão concluídos. Por exemplo, você pode adicionar async.parallel dentro de start e esta função pode ficar assim: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();
});
};