Express.js:向客户端发送响应后执行后台任务

wde*_*tac 9 javascript node.js express

这是一个简单的控制器。接收来自用户的请求,执行任务并响应他们。我的目标是尽快做出响应并完成任务,这样用户就不会注意到漫长的等待时间。

这是我的代码:

router.post("/some-task", (req, res, next) => {
    res.send("ok!");
    Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 5000); // lengthy task
});
Run Code Online (Sandbox Code Playgroud)

当发布到这个控制器时,我需要等待 5000 毫秒才能得到响应,这不是我想要的。我已经尝试过承诺,但也不起作用。正确的做法是什么?

ski*_*lly 5

改进 Evyatar Meged 答案的版本:

router.post("/some-task", (req, res, next) => {
    res.send("ok!");
    setTimeout(()=>{
        Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 5000); // lengthy task
    }, 0);
});
Run Code Online (Sandbox Code Playgroud)

这不是关于res.end,只是setTimeout做这件事。但我不建议这样做,因为它会阻止整个应用程序处理其他请求。您可能需要考虑使用child process