【发布时间】: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