繁体   English   中英

如何在 findOneAndUpdate 中使用 async-await

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM