async.series
がどのように誤解されていると思いますか 動作します。
async.series
の関数 callback
を受け取らないでください 議論として、彼らはそれを呼びません。そして、そのrequest(...)
ものはおそらくまったく機能ではありません。それがおそらく非同期ループを壊す理由です。これを試してください:
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();
});
};