【问题标题】:Can't use a variable from an await mongodb query无法使用等待 mongodb 查询中的变量
【发布时间】:2023-03-07 23:09:01
【问题描述】:

我在另一个查询中使用 mongodb 查询结果时遇到问题。 我希望这段代码能解释它(它写在一个异步函数中) - 请注意我在第二个查询中使用 created_comment._id:

let created_comment = await Comment.create(new_comment, (err, newReturnedComment)=>{
if(err){
        console.log(err);
    }           
});

await User.findOneAndUpdate({_id: req.user._id},{ $addToSet: {commentsIds: created_comment._id} },
    function(err, updated_user) {
        if (err) {
            console.log(err);
                }
            });

所以即使我在第一个查询中使用 await,当我尝试访问 created_comment 变量时,我什么也得不到。是因为 create 和 findOneAndUpdate 不是承诺吗?您能否请我参考一份指南,该指南解释了在 nodejs 后端进行此类查询的最佳方式是什么? 谢谢你。

【问题讨论】:

    标签: javascript mongodb promise async-await


    【解决方案1】:

    如果您想使用 async/await 并期望调用返回承诺,请不要将回调传递给 mongodb 函数。随便写

    try {
        const created_comment = await Comment.create(new_comment);
        const updated_user = await User.findOneAndUpdate({_id: req.user._id}, {$addToSet: {commentsIds: created_comment._id}});
    } catch(err) {
        console.log(err);
    }
    

    【讨论】:

    • 谢谢!它真的帮助了我。所以我的错误是使用回调?
    • 是的,当您传递回调参数时,IIRC mongodb 方法不会返回承诺。此外,await 的回调也毫无用处……
    猜你喜欢
    • 2022-01-19
    • 2019-04-02
    • 2019-02-25
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多