Tôi nghĩ rằng bạn hiểu sai cách async.series
hoạt động.
Các chức năng của bạn trong async.series
không nhận callback
như một lập luận và họ không gọi nó. Và request(...)
đó công cụ có lẽ không phải là một chức năng nào cả. Đó có thể là lý do tại sao nó phá vỡ vòng lặp không đồng bộ. Hãy thử điều này:
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();
}
);
Lưu ý rằng tôi đã thêm callback
đối số khi gọi start
. Do đó, bạn sẽ phải cấu trúc lại mã của mình một cách linh hoạt để mọi hàm đều chấp nhận callback
có thể được gọi là cuối cùng khi bạn biết rằng tất cả các công việc đã hoàn thành. Ví dụ:bạn có thể thêm async.parallel
bên trong start
và chức năng này có thể trông giống như sau:
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();
});
};