Ik denk dat je verkeerd begrijpt hoe async.series
werkt.
Uw functies in async.series
neem geen callback
aan als een argument en ze noemen het niet. En dat request(...)
spul is waarschijnlijk helemaal geen functie. Dat is waarschijnlijk de reden waarom het de asynchrone lus verbreekt. Probeer dit:
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();
}
);
Merk op dat ik callback
heb toegevoegd argument bij het aanroepen van start
. U zult uw code dus grondig moeten herstructureren, zodat elke functie callback
accepteert die aan het einde kan worden opgeroepen als u weet dat alle taken zijn voltooid. U kunt bijvoorbeeld async.parallel
. toevoegen binnen start
en deze functie kan er als volgt uitzien:
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();
});
};