【发布时间】:2018-10-14 08:33:04
【问题描述】:
我正在使用 Mongoose,并且正在从数据库中查找客户。如果客户存在,我将返回一个 customerId。但是,如果客户不存在,我想创建它们,然后返回客户 ID。无论哪种情况,我都希望承诺以 customerID 结尾。无论如何,虽然我在文档中看到可以使用“Promise.resolve”立即包装返回值,但我收到了一个错误。当尝试通过包装它们的返回值来使同步任务与 Node 更加一致时,此功能显然很有用。无论如何,有什么更好的方法来处理这个或返回一个承诺?归根结底,我希望代码返回客户对象或陷入捕获/错误。
TypeError: Promise.resolve is not a constructor
下面是代码(我删掉了一些安全方面的东西,但我想我没有做任何严重的改动)。
Customer.findOne({email: email}).then((customer) => {
if (customer) {
return Promise.resolve(customer);
}
else {
return new Customer({email: email}).save();
}
}).then( function(customer) {...
这真的是关于 Promises,而不是 Mongoose 或 MongoDb。如果你处于一个处于 Promise 内部并且想要将值返回到链中的情况,你会怎么做?
【问题讨论】:
-
对于猫鼬 API,
return Customer.findOneAndUpdate({ email },{ },{ "upsert": true, "new": true })。除了"new": true而不是"returnOriginal": false之外,基本上与标准API 相同。当数据库已经这样做时,无需链接承诺。 -
太美了!
标签: node.js mongodb mongoose promise