Node.JS async.parallel不会等到所有任务完成

我正在使用aync.parallel并行运行两个函数。 这些函数请求RSS提要。 然后RSS提要被parsing并添加到我的网页。

但由于某种原因, async.parallel运行callback方法,而不必等到两个函数完成

该文件说:

一旦任务完成,结果作为一个数组传递给最终的callback。

我的代码。

 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()

Node.JS文档说:

response.end()方法必须在每个响应中调用。

如果我不打电话,我的网页将被“下载”(我的意思是在我的浏览器的地址栏中的进度条)。

我想你的fetchRss函数是asynchronous的:稍后执行,并立即调用callback。 您应该将callback发送到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.reflectasync.reflectAll来确保所有function都已完成http://caolan.github.io/async/docs.html#reflect