我有基本上看起来像这样的代码:
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
,即使在发送响应后,我无法解决的诺言仍能解决吗?还是在发送响应后停止所有代码执行?像这样:
Promise.all([
myPromise("foo", () => saveToFirebase("foo")),
myPromise("bar", () => saveToFirebase("bar")),
... // 50 more of these ^
])
res.status(200).send('ok');
最佳答案
承诺将始终得到执行。如您在下图中看到的,发送响应后,在控制台上打印了after promise resolve
。
您还可以通过将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/