在 Express.js 中,我想在发送响应后执行一个任务。
然而,我希望尽可能快地返回响应时间。 我不需要将此任务的结果返回给客户端,因此我正在尝试立即返回响应。
该任务不是 CPU 密集型,因此事件循环不会被卡住。
因此,这是我的后台任务:
第二种尝试是将backgroundTask函数调用放入setTimeout()中:
问题是:最好的方法是什么,以确保响应发送到客户端并在后台执行任务?
附注:我知道“最佳方法”是使用Worker Threads,但我只需要一种简单的方法来执行后台任务。
然而,我希望尽可能快地返回响应时间。 我不需要将此任务的结果返回给客户端,因此我正在尝试立即返回响应。
该任务不是 CPU 密集型,因此事件循环不会被卡住。
因此,这是我的后台任务:
function backgroundTask() {
return new Promise(resolve => setTimeout(() => {
console.log("backgroundTask finished");
resolve();
}, 1000));
}
我的第一次尝试是直接调用backgroundTask函数:
app.post('/messages', async function (req, res) {
res.status(200).send({ success: true });
performBackgroundTasks();
});
第二种尝试是将backgroundTask函数调用放入setTimeout()中:
app.post('/messages', async function (req, res) {
res.status(200).send({ success: true });
setTimeout(() => performBackgroundTasks(), 0);
});
问题是:最好的方法是什么,以确保响应发送到客户端并在后台执行任务?
附注:我知道“最佳方法”是使用Worker Threads,但我只需要一种简单的方法来执行后台任务。
res.on('finish', () => {})
。 - Rashomon