gpt4 book ai didi

javascript - Mongoose 和 Bluebird 兑现 promise

转载 作者:行者123 更新时间:2023-12-03 06:52:07 25 4
gpt4 key购买 nike

我使用 mongoose 和 bluebird 作为 promise 框架。每次我使用“保存”或“删除”时,我都会收到此错误:

Warning: a promise was created in a handler but was not returned from it

我真的尝试了几天,在谷歌搜索时,我尝试了很多方法,仅举一些:

  1. 创建 promise 并在保存/删除 CB 中解决它;
  2. 将“return”放入如此多的逻辑组合中以确保它始终兑现 promise 。
  3. 在模型中创建函数,并将其命名为“saveAsync”(我看到了在一个示例中)并在那里进行所有的 promise 处理。
  4. 有点有趣,但我尝试更新我的所有项目 npm 包,因为我在 github 上看到了有关它的讨论,有人提到了它们已经解决了。但没有成功。

    还有更多......我真的很绝望。
    不要误会我的意思,代码运行得很好,但是每次在控制台中看到这个巨大的警告都让我感到非常内疚。

有什么建议吗?

最佳答案

此错误意味着某些代码执行了类似以下操作:

somePromise.then(x => {
someOtherPromiseReturningFunction();
}).then(value => {
// forgot a return, oh dear
});

这是一个非常常见的错误,即忘记返回,它会扰乱错误处理并导致问题。

有时问题不在于您的代码,而在于您正在使用的库的代码 - 在这种情况下,您应该禁用该代码的警告:

  • 通过 require("bluebird") 分别为您自己的代码和 mongoose 需要 bluebird,并在使用时发出警告。
  • 禁用针对 mongoose 复制使用的警告。

您可以通过在代码中使用 require("bluebird") 并使用 require("bluebird/js/release/promise")() 覆盖 mongoose 的 Promise 来获取 bluebird 的两个副本; 创建一个独立的副本。

关于javascript - Mongoose 和 Bluebird 兑现 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37446980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com