我有以下代码
Product.findOneAndUpdate({ name: 'Cycling Jersey' }, { onSale: true }, { new: true })
.then(data => {
console.log("IT WORKED!")
console.log(data);
})
.catch(err => {
console.log("OH NO ERROR!")
console.log(err)
})
它更新数据库,并将更新的文档打印到终端,但是,当我只有以下行时
Product.findOneAndUpdate({ name: 'Cycling Jersey' }, { onSale: true }, { new: true })
更新没有发生。它应该发生吧? .then 只是在更新完成时通知我,但如果我不使用 .then 它至少应该在后台更新数据库。如果我在 5 分钟或更长时间后打开 Mongo Shell,数据库中没有任何变化,为什么会这样?
这个问题出奇地难以回答。然而,文档和源代码都表明该方法并没有真正启动操作并返回承诺。相反,它配置查询对象来执行操作,并返回查询对象。然而,查询对象本身有一个“then”方法,它确实启动真正的操作并返回一个承诺。
所以你是对的:在你调用 then() 之前什么都不会发生。
这样做可能是为了允许额外的链式调用在调用 then() 之前覆盖或调整查询。
虽然您选择手动编写 then() 调用,但值得注意的是,此方法也与“await”关键字兼容,因为该关键字实际上适用于任何“thenable”(任何附加有“then”方法的对象)行为就像承诺一样),它并不严格要求承诺。