NodeJs,异步函数在 api 路由返回后完成

NodeJs, does asynchronous function complete after api route has returned

本文关键字:返回 路由 api 异步 函数 NodeJs      更新时间:2023-09-26

我的本地测试发现这个问题是正确的。

给定以下代码,其中"asyncOne"和"asyncTwo"是异步函数,如果"asyncTwo"在"asyncOne"之前完成,

"asyncOne"是否还有时间完成执行?

router.get("/", function (req, res, next) {
       asyncOne(function () {
            console.log("Completed asyncOne");
       });

       asyncTwo(function () {
            console.log("Completed asyncTwo");
            return res.json("Done.");
       });
});

是的,所有代码都将执行。但是您无法在asyncOne函数中return res.json("Done.");,因为已经发送了结束响应。

如果您希望在完成两个异步函数时调用返回,则应签出异步模块。真的很棒。

也许你应该像这样调用你的函数:

router.get("/", function (req, res, next) {
  Promise.all[asyncOne(), asyncTwo()].then(() => {
     return res.json("Done.");
  });
});

或者像这样:

router.get("/", function (req, res, next) {
  asyncOne(function () {
   console.log("Completed asyncOne");
    asyncTwo(function () {
     console.log("Completed asyncTwo");
     return res.json("Done.");
    });
   });       
 });