मुझे लगता है कि आप गलत समझते हैं कि कैसे async.series
काम करता है।
async.series
. में आपके कार्य callback
न लें एक तर्क के रूप में और वे इसे नहीं कहते हैं। और वह request(...)
सामान शायद एक समारोह नहीं है। शायद इसीलिए यह async लूप को तोड़ता है। इसे आजमाएं:
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();
}
);
ध्यान दें कि मैंने callback
जोड़ा है कॉल करते समय तर्क start
. इस प्रकार आपको अपने कोड को तेजी से रिफलेक्टर करना होगा ताकि प्रत्येक फ़ंक्शन callback
को स्वीकार कर सके जिसे अंत में बुलाया जा सकता है जब आप जानते हैं कि सभी कार्य हो चुके हैं। उदाहरण के लिए आप async.parallel
. जोड़ सकते हैं अंदर start
और यह फ़ंक्शन इस तरह दिख सकता है:
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();
});
};