MongoDB节点驱动程序UpdateOne Promise参数
我对传递给写操作的promise函数的参数感到困惑。
例如,updateOne的文档说回调是updateWriteOpCallback的一个实例,它有参数error
和result
。
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);
});