saveToFirebase("foo")), myPromise("bar"-6ren">
gpt4 book ai didi

javascript - Express:即使发送响应后,我的代码仍然可以运行吗?

转载 作者:行者123 更新时间:2023-12-01 02:49:40 24 4
gpt4 key购买 nike

我的代码基本上如下所示:

return Promise.all([
myPromise("foo", () => saveToFirebase("foo")),
myPromise("bar", () => saveToFirebase("bar")),
... // 50 more of these ^
]).then(() => {
res.status(200).send('ok');
}).catch(err => {
console.log(err.stack);
res.status(500).send('error');
});

我的请求超时,因为我的某些请求需要很长时间。我的问题是:如果我只是调用 res.status(200) 而没有链接它 Promise.all,即使在发送响应后,我 Unresolved promise 是否仍然会解决?或者一旦发送响应,我的代码的所有执行都会停止吗?

像这样:

Promise.all([
myPromise("foo", () => saveToFirebase("foo")),
myPromise("bar", () => saveToFirebase("bar")),
... // 50 more of these ^
])
res.status(200).send('ok');

最佳答案

promise 一定会兑现。正如您在下图中看到的,发送响应后 afterpromiseresolve 打印在控制台上。

Promise resolve after response is send

您还可以通过将 res.shouldKeepAlive 设置为 true 来保持连接处于事件状态,如下所示:

Promise.all([
check(2),
check(2),
check(2)
]).then(() => {
console.log('after promise resolve');
setTimeout(function() {
res.send('done');
}, 10000);
});
console.log('Before promise resolve');
res.shouldKeepAlive = true;

关于javascript - Express:即使发送响应后,我的代码仍然可以运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47042361/

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