【问题标题】:Why cant I pass a mongoose promise resolve as the handler for another promise onResolve为什么我不能通过一个猫鼬承诺解析作为另一个承诺 onResolve 的处理程序
【发布时间】:2014-02-15 19:34:34
【问题描述】:

使用 Mongoose 和 mpromise,我在回调中遇到了一些奇怪的行为。查看Promise.prototype.onResolve 的 mpromise 代码,我不明白为什么该函数无法正确应用。

var prom = new mongoose.Promise();
anotherPromise.onResolve(prom.resolve);

anotherPromise 的 onResolve 似乎永远不会解决,除非我将其放入匿名函数中。

var prom = new mongoose.Promise();
anotherPromise.onResolve(function(err, doc) { prom.resolve(err, doc); });

我在这里误会了什么?

【问题讨论】:

  • 你不做prom = anotherPromiseprom = anotherPromise.then()有什么原因吗?
  • 是的,我需要为Model#save 创建一个承诺包装器,因为它不返回承诺。我正在处理我的 restify 路线中的所有承诺。

标签: javascript mongoose promise


【解决方案1】:

this context 很重要。您没有传递特定 promresolve 方法,而是没有绑定到任何承诺并且在没有(或错误)上下文的情况下调用时将不起作用的通用方法。

在您的匿名函数中,您正在显式调用prom 对象上的方法。你也可以使用bind:

anotherPromise.onResolve(prom.resolve.bind(prom));

【讨论】:

  • 完美。我打算尝试绑定它;完全有道理,感谢您指出这一点!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-18
相关资源
最近更新 更多