最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

MongoDB节点驱动程序UpdateOne Promise参数

运维笔记admin12浏览0评论

MongoDB节点驱动程序UpdateOne Promise参数

MongoDB节点驱动程序UpdateOne Promise参数

我对传递给写操作的promise函数的参数感到困惑。

例如,updateOne的文档说回调是updateWriteOpCallback的一个实例,它有参数errorresult

db.collection.('my-collection')
    .updateOne({_id: someObjectID}, {$set: someChanges}, function(err, result){
        console.log(err); //null
        console.log(result); //CommandResult
    }

在上面的示例中,如果操作成功,则err正确设置为null,result包含结果。

但是,如果我选择承诺而不是回调:

db.collection.('my-collection')
    .updateOne({_id: someObjectID}, {$set: someChanges})
    .then((err, result) => {
        console.log(err); //CommandResult
        console.log(result); //undefined
    }

第一个参数err实际上给了我在result应该是什么,而result是未定义的。有没有解释为什么会发生这种情况?

回答如下:

这是因为这不是承诺的工作方式。当一个承诺被拒绝时,你应该用promise.catch()方法捕获它,而不是promise.then()

所以:

  • promise.then()用于获得resolve()操作的结果。
  • promise.catch()用于获得reject()操作的结果。

因此,您的代码应该是:

db.collection.('my-collection')
    .updateOne({_id: someObjectID}, {$set: someChanges})
    .then((result) => {
        console.log(result);
    }).catch((err) => {
        console.log(err);
    });
发布评论

评论列表(0)

  1. 暂无评论