我有基本上看起来像这样的代码:

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

javascript - Express:即使发送响应后,我的代码是否仍在运行?-LMLPHP

您还可以通过将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/

10-10 23:41