【问题标题】:mpromise/Monk promise never resolves承诺/僧侣承诺永远不会解决
【发布时间】:2016-05-06 06:17:31
【问题描述】:

我似乎无法弄清楚为什么当我向它传递一个函数时我的承诺永远不会解决。我有一个这样的类方法:

test(){
    return this.dbCollection.insert(...);
}

通过 Monk 将一些数据插入到 MongoDB 集合中。它返回一个承诺。我正在从另一个类中调用此方法,如下所示:

var testClass = new TestClass();
testClass.test().onResolve(...);

这就是我遇到麻烦的地方。如果我这样做:

testClass.test().onResolve(console.log('Resolved!'));

承诺已解决,我看到“已解决!”在控制台中,一切都按预期工作。如果我使用 MongoDB 控制台检查,我可以看到确实插入了数据。但是,如果我这样做:

testClass.test().onResolve(function(err, data){
    console.log('Resolved!');
});

承诺永远不会解决,控制台不会打印任何内容,但仍会插入数据。有没有人见过这种行为?我认为这是 mpromise 的一个问题,所以我标记了 Mongoose,因为它使用相同的包作为 Promise。

【问题讨论】:

  • 好吧,如果你通过undefined并立即执行console.log,这并不一定意味着承诺实际上已经解决。
  • 您是否尝试过添加错误处理程序?顺便说一句,您通常应该始终使用 then 而不是某些 onResolve 方法。
  • 是的,我同意承诺不一定会得到解决(我认为这是问题的症结所在),但使用 .onResolve() 和 .then() 的行为是相同的。整个块被一个错误处理程序包围,不幸的是,它没有抛出任何错误。
  • 我的意思不是 try-catch 语句,而是 .then(function(data) { console.log("fulfilled", data); }, function(err) { console.error("rejected", err); });!
  • 啊,是的,我也试过了,不幸的是结果是一样的。编辑:我只是再次进行了一次完整性检查以确认。

标签: javascript node.js mongoose promise monk


【解决方案1】:

感谢@Bergi 的帮助。就像你建议的那样,承诺实际上并没有解决。事实证明这是 mpromise 的 all() 方法的问题(即,显然我不完全理解它是如何工作的)。 test() 正在使用 all() 返回一个 Promise 的聚合,这就是没有解决的问题。当这被排除在等式之外时,一切都按预期工作。现在来弄清楚all()是怎么回事...

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多