Jeg tror, at du misforstår hvordan async.series
virker.
Dine funktioner i async.series
tag ikke callback
som et argument, og de kalder det ikke. Og den request(...)
ting er sandsynligvis ikke en funktion overhovedet. Det er sandsynligvis derfor, den bryder asynkron loop. Prøv dette:
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();
}
);
Bemærk, at jeg har tilføjet callback
argument, når du kalder start
. Du bliver derfor nødt til at omstrukturere din kode grundigt, så hver funktion accepterer callback
som kan kaldes til sidst, når du ved, at alle opgaver er udført. For eksempel kan du tilføje async.parallel
inde i start
og denne funktion kan se sådan ud:
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();
});
};