[英]Node.JS async.parallel doesn't wait until all the tasks have completed
我使用aync.parallel並行運行兩個函數。 這些函數請求RSS提要。 然后解析RSS提要並將其添加到我的網頁。
但由於某種原因, async.parallel
運行回調方法而不等待兩個函數完成
任務完成后,結果將作為數組傳遞給最終回調。
我的代碼。
require('async').parallel([ function(callback) {
fetchRss(res, bbcOpts); // Needs time to request and parse
callback();
}, function(callback) {
// Very fast.
callback();
} ], function done(err, results) {
if (err) {
throw err;
}
res.end("Done!");
});
事實上我只有“完成!” 在我的網頁上。 為什么?
為什么我需要調用res.end()
?
必須在每個響應上調用方法response.end()。
如果我不打電話,我的網頁將被“下載”(我的意思是我的瀏覽器地址欄中的進度條)。
我想你的fetchRss
函數是異步的:稍后執行,並立即調用回調。 您應該將回調發送到fetchRss
:
function fetchRss(res, bbcOpts, callback) {
doSomething();
callback();
}
require('async').parallel([ function(callback) {
fetchRss(res, bbcOpts, callback); // Needs time to request and parse
}, function(callback) {
// Very fast.
callback();
} ], function done(err, results) {
if (err) {
throw err;
}
res.end("Done!");
});
在旁注中,您應該調用res.end()
,以便Node知道消息已完成並且已寫入所有內容(標題+正文)。 否則,套接字將保持打開狀態並將永遠等待另一條消息(這就是瀏覽器顯示進度條的原因:它不知道請求已經結束)。
您可以使用async.reflect或async.reflectAll來確保所有函數都已完成http://caolan.github.io/async/docs.html#reflect
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.