Je pense que vous comprenez mal comment async.series fonctionne.
Vos fonctions dans async.series ne pas prendre de callback comme argument et ils ne l'appellent pas. Et cette request(...) stuff n'est probablement pas une fonction du tout. C'est probablement pourquoi il casse la boucle asynchrone. Essayez ceci :
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();
}
);
Notez que j'ai ajouté callback argument lors de l'appel de start . Ainsi vous devrez refactoriser fortement votre code pour que chaque fonction accepte le callback qui peut être appelé à la fin lorsque vous savez que tous les travaux sont terminés. Par exemple, vous pouvez ajouter async.parallel à l'intérieur de start et cette fonction peut ressembler à ceci :
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();
});
};