NodeJs在api路由返回后完成异步功能

时间:2016-01-18 11:29:47

标签: javascript node.js asynchronous

我的本​​地测试发现问题属实。

鉴于以下代码,'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.");
       });
});

2 个答案:

答案 0 :(得分:1)

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

如果您希望在完成两个异步功能时调用返回,则应该检出async模块。这真的很棒。

答案 1 :(得分:1)

也许你会像这样打电话给你的功能:

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.");
    });
   });       
 });