我在用异步并行 https://github.com/caolan/async并行运行两个函数。这些函数请求 RSS 源。然后 RSS 提要被解析并添加到我的网页中。
但由于某种原因async.parallel
运行回调方法而不等待两个函数完成
文档说: https://github.com/caolan/async
任务完成后,结果将传递至最终
回调作为数组。
My code.
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()
?
The Node.JS 文档 http://nodejs.org/api/http.html#http_response_end_data_encoding says:
每个响应都必须调用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 知道消息是完整的并且所有内容(标头 + 正文)都已写入。否则,套接字将保持打开状态并永远等待另一条消息(这就是浏览器显示进度条的原因:它不知道请求已结束)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)