有人告诉我,执行在处理Express请求期间触发但在res.send
之前未完成的任何操作都是不正确的。例如,发送推送通知或将项目保存在DB中,而无需等待其完成。如果此说法正确,在这种情况下会发生什么?
示例代码(假设我们不需要任何验证或此处的任何其他操作,并且也不必担心异步操作的结果,只是为了证明我的意思)
router.get('/push', async (req, res) {
const data = req.body;
// Three lines below are async actions
db.save(req.body); // Do not await here
push.send(req.body.device, 1); // Do not await here
remoteLogger.info('received push request', req.body); // Do not await here
res.status(200).send('ok');
})
答案 0 :(得分:0)
因为保存操作(或任何其他操作)由于某种原因而可能失败,并且您可能希望在这种情况下客户端出现错误。 如果您在保存操作完成之前将响应发送给客户端,则由于已经发送了响应并且连接已关闭,您将无法告诉客户端。