gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 05:08:00 27 4
gpt4 key购买 nike

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

但由于某些原因 async.parallel 运行回调方法时没有等到两个函数完成

The documentation says:

Once the tasks have completed, the results are passed to the final callback as an array.

我的代码。

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 documentation说:

The method, response.end(), MUST be called on each response.

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

最佳答案

我假设您的 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 知道消息已完成并且所有内容(标题 + 正文)都已写入。否则,套接字将保持打开状态并永远等待另一条消息(这就是浏览器显示进度条的原因:它不知道请求已结束)。

关于javascript - Node.JS async.parallel 不会等到所有任务都完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20186787/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com