【问题标题】:Q Promise Equivalent of BlueBird Promise.Bind()Q Promise 等价于 BlueBird Promise.Bind()
【发布时间】:2014-08-27 00:18:02
【问题描述】:

几个问题,Q 是否有 bind() 方法,如 BlueBird API 和这张幻灯片 JavaScript Promises ~Kerrick Long 中所见?它是核心 Promise/A+ 规范的一部分吗?如果没有,是否有 polyfill 或解决方法?

【问题讨论】:

  • Q 实现了 Promise/A+ 规范,所以如果它不这样做,它可能是不标准的。
  • Q 在 promises 中设置 this 是否有 shim?
  • @tadman Q 实现了很多不在 Promises/A+ 规范中的东西。
  • 在那张幻灯片中,.bind 不是在承诺上被调用,而是在函数上被调用
  • @Esailija 哦,开枪。你是对的。我的错误

标签: javascript node.js promise q bluebird


【解决方案1】:

好吧,Promises/A+ 规范只指定了.then 的工作方式,所以.bind 不是 Promises/A+ 规范的一部分。事实上,Promises/A+ 指定 this 值的行为就像一个普通的函数调用,并且没有绑定承诺 - Bluebird 通过返回一个不是常规承诺的 BoundPromise 并与其他承诺库无缝互操作来绕过这个限制。

没有等效的 Q 功能,一旦 ES6 落地,您就可以使用“胖箭头”=> 来在then 链中进行词法绑定:

this.x = 15;
Q().then(() => console.log(this.x)) // always logs 15

一般来说,这是 Bluebird 超过 Q 的众多功能之一,没有明显的方法可以“填充”,因为它改变了 .then 的行为 - 你必须在 Q 承诺中覆盖 .then并有效地为整个库创建一个包装器来实现这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2017-10-24
    相关资源
    最近更新 更多