Sim*_*gro 4 javascript node.js express
在 Express.js 中,我想在发送响应后执行任务。
但是,我想让响应时间尽可能快。我不需要将此任务的结果返回给客户端,因此我尝试立即返回响应。
该任务不是 CPU 密集型任务,因此事件循环不会被该任务锁定。
所以,这是我的后台任务:
function backgroundTask() {
return new Promise(resolve => setTimeout(() => {
console.log("backgroundTask finished");
resolve();
}, 1000));
}
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是直接调用backgroundTask函数:
app.post('/messages', async function (req, res) {
res.status(200).send({ success: true });
performBackgroundTasks();
});
Run Code Online (Sandbox Code Playgroud)
第二次尝试是将backgroundTask函数调用到setTimeout()中:
app.post('/messages', async function (req, res) {
res.status(200).send({ success: true });
setTimeout(() => performBackgroundTasks(), 0);
});
Run Code Online (Sandbox Code Playgroud)
问题是:确保响应发送到客户端并且任务在后台执行的最佳方法是什么?
旁注:我知道“最好的方法”是使用工作线程,但我只需要一种简单的方法来执行后台任务。
您可以使用该finish事件:
app.use((req, res, next) => {
res.on('finish', () => {
console.log('Response has been sent!')
performBackgroundTasks();
})
next()
})
Run Code Online (Sandbox Code Playgroud)