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();
});
};