【发布时间】:2021-10-11 15:34:21
【问题描述】:
在我的控制器模块中,我有一个函数 httpAddNewLaunch 在 POST 请求上调用:
async function httpAddNewLaunch(req, res) {
let launch = req.body
addNewLaunch(launch)
console.log(launch)
return res.status(201).json(launch)
}
AddNewLaunch 函数:
async function addNewLaunch(launch) {
launch.flightNumber = (await launchesDataBase.findOne({})).flightNumber + 1
console.log(launch)
await saveLaunch(launch)
// launches.set(launch.flightNumber, launch)
}
saveLaunch 函数:
async function saveLaunch(launch) {
await launchesDataBase.findOneAndReplace({
flightNumber: launch.flightNumber
}, launch, {
upsert: true
})
}
当函数 httpAddNewLaunch 调用时,它不会等到它调用的其他函数完成(addNewLaunch(launch) -> saveLaunch(launch)),它只是继续执行,所以当我@987654324 @ 在调用 addNewLaunch(launch) 之后,它会记录一个没有 flightNumber 的对象。
然后我在 addNewLaunch(launch) 之前添加 await,它会附加 flightNumber。
如果异步函数只是返回 Promise 的函数,但它们像普通函数一样执行,那么为什么会这样工作,所以它们应该按调用顺序执行,但在我的情况下它不会等待并且只是没有 flightNumber 的 console.logs(launch)?
你能解释一下我哪里错了吗:)
【问题讨论】:
-
"只是返回 Promise 的函数,但它们像普通函数一样执行" - 除非它们
await很明显。
标签: javascript node.js asynchronous mongoose promise