[英]How to use async-await in findOneAndUpdate
我尝试使用以下代码 - 在数据库中找到一个名称并将其替换为另一个名称,并计算并打印年龄为 30 的文档数量
const findAndUpdate = async (name, age) => {
const user = await User.findOneAndUpdate({name})
const count = await User.countDocuments({age})
return count
}
findAndUpdate('oldName', 'newName', 30).then(count => {
console.log(count)
}).catch(e => {
console.log(e)
})
你用得很好。 异步/等待是这样工作的。 您有一个执行任务的函数,但您不想等到它完成任务才能继续另一个任务。
然后您使用 async 语句来表明它是一个异步函数,然后当您想要执行返回数据的任务时使用 await,这样它就不会阻塞其他任务。
问题是你正在调用findAndUpdate
期望它返回一个承诺,如果你想使用.then
来获取计数你的函数必须返回一个承诺
const findAndUpdate = (name, age) => {
return new Promise(async (resolve, reject) => {
try {
const user = await User.findOneAndUpdate(...)
const count = await User.countDocuments(...)
resolve(count)
} catch (err) {
reject(err)
}
})
}
findAndUpdate(...).then(count => {
console.log(count)
}).catch(e => {
console.log(e)
})
看起来您没有向User.findOneAndUpdate()
提供 newName 。 你可以像这样修复它:
const findAndUpdate = async (oldName, newName, age) => {
const user = await User.findOneAndUpdate({name: oldName}, {name: newName})
const count = await User.countDocuments({age})
return count
}
findAndUpdate('oldName', 'newName', 30).then(count => {
console.log(count)
}).catch(e => {
console.log(e)
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.