Saya rasa Anda salah paham bagaimana async.series
bekerja.
Fungsi Anda di async.series
jangan terima callback
sebagai argumen dan mereka tidak menyebutnya. Dan request(...)
itu barang mungkin bukan fungsi sama sekali. Itu mungkin mengapa itu merusak loop async. Coba ini:
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();
}
);
Perhatikan bahwa saya telah menambahkan callback
argumen saat memanggil start
. Dengan demikian Anda harus memfaktorkan ulang kode Anda dengan baik sehingga setiap fungsi menerima callback
yang dapat dipanggil di akhir ketika Anda tahu bahwa semua pekerjaan sudah selesai. Misalnya Anda dapat menambahkan async.parallel
di dalam start
dan fungsi ini mungkin terlihat seperti ini:
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();
});
};