我正在使用aync.parallel来并行运行两个函数。这些功能要求RSS feed。然后解析RSS feed,并将其添加到我的网页中。
但是由于某种原因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()
?
在Node.js的文件说:
必须在每个响应上调用方法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知道消息已完成并且所有内容(标头+正文)均已编写。否则,套接字将保持打开状态,并将永远等待另一条消息(这就是浏览器显示进度栏的原因:它不知道请求已结束)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句