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