【问题标题】:Mongoose and BlueBird return from promise猫鼬和蓝鸟从承诺中回归
【发布时间】:2016-09-23 15:20:06
【问题描述】:

我使用 mongoose 和 bluebird 作为 Promise 框架。 每次我使用“保存”或“删除”时都会出现此错误:

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

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

  1. 创建一个承诺并在保存/删除 CB 中解决它;
  2. 将“return”放在如此多的逻辑组合中以确保它 总是从承诺中“回归”。
  3. 在模型中创建函数,并将其命名为“saveAsync”(我看到了 在一个示例中)并在那里完成所有的承诺处理。
  4. 有点好笑,但我尝试更新我所有的项目 npm 包, 因为我在 github 上看到过关于它的讨论,有人提到他们 已经解决了。但它没有用。

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

有什么建议吗?

【问题讨论】:

    标签: javascript node.js mongodb mongoose bluebird


    【解决方案1】:

    这个错误意味着一些代码做了类似的事情:

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

    忘记return 是一个非常常见的错误,它会干扰错误处理并导致问题。

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

    • 通过require("bluebird") 单独为您自己的代码和猫鼬需要 bluebird,并在警告中使用它。
    • 禁用复制猫鼬使用的警告。

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

    【讨论】:

    • 直到现在我的猫鼬都是这样需要的:import mongoose from 'mongoose'; mongoose.Promise = require('bluebird'); 不一样吗?目前它不起作用。
    • 你的要求不是基本一样吗?我可以把警告转向那个吗? (抱歉重复评论,来不及编辑)。
    猜你喜欢
    • 2015-10-27
    • 2015-11-19
    • 2016-11-21
    • 2016-06-10
    • 2016-06-04
    • 1970-01-01
    • 2015-03-06
    • 2015-03-05
    • 1970-01-01
    相关资源
    最近更新 更多