我的本地测试发现问题属实。
鉴于以下代码,'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.");
});
});
答案 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.");
});
});
});