如果没有 .then 链接,Mongoose Update 方法是否不起作用?

问题描述 投票:0回答:1

我有以下代码

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,数据库中没有任何变化,为什么会这样?

node.js mongodb mongoose odm
1个回答
0
投票

这个问题出奇地难以回答。然而,文档和源代码都表明该方法并没有真正启动操作并返回承诺。相反,它配置查询对象来执行操作,并返回查询对象。然而,查询对象本身有一个“then”方法,它确实启动真正的操作并返回一个承诺。

所以你是对的:在你调用 then() 之前什么都不会发生。

这样做可能是为了允许额外的链式调用在调用 then() 之前覆盖或调整查询。

虽然您选择手动编写 then() 调用,但值得注意的是,此方法也与“await”关键字兼容,因为该关键字实际上适用于任何“thenable”(任何附加有“then”方法的对象)行为就像承诺一样),它并不严格要求承诺。

© www.soinside.com 2019 - 2024. All rights reserved.