很少有问题,Q是否具有BlueBird API和此幻灯片JavaScript Promises ~Kerrick Long中所示的bind()
方法?它是核心承诺/ A +规范的一部分吗?如果没有,是否有polyfill或解决方法?
最佳答案
好吧,Promises / A +规范仅指定.then
的工作方式,因此.bind
不是Promises / A +规范的一部分。实际上,Promises / A +指定this
值的行为类似于普通的函数调用,并且Promise没有绑定-Bluebird通过返回不是常规Promise的BoundPromise并与其他Promise库无缝互操作来绕过此限制。
没有等效的Q功能,一旦ES6登陆,您就可以使用“ fat arrow” =>
来按词法绑定then
链中的范围:
this.x = 15;
Q().then(() => console.log(this.x)) // always logs 15
一般而言,这是Bluebird超过Q的众多功能之一,没有明显的方法可以“将其填入”,因为它改变了
.then
的行为-您必须在Q承诺中覆盖.then
并有效地创建整个库的包装器来完成此任务。关于javascript - BlueBird Promise.Bind()的Q Promise等效项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25509977/