几个问题,Q是否有BlueBird API和本幻灯片JavaScript Promises~Kerrick Long中所示的bind()
方法?它是核心承诺/A+规范的一部分吗?如果没有,是否有polyfill或变通方法?
好吧,Promises/A+规范只指定.then
的工作方式,所以.bind
不是Promises/A+规范的一部分。事实上,Promises/A+指定this
值的行为与普通函数调用类似,并且promise不受绑定-Bluebird通过返回BoundPromise来绕过这一限制,BoundPromises不是常规的promise,并与其他promise库无缝交互。
没有等效的Q功能,一旦ES6着陆,您就可以使用"胖箭头"=>
来灵活地绑定then
链中的作用域:
this.x = 15;
Q().then(() => console.log(this.x)) // always logs 15
一般来说,这是Bluebird在Q上拥有的众多功能之一,由于它改变了.then
的行为,因此没有明显的方法来"填充"它——你必须在Q promise中覆盖.then
,并有效地在整个库上创建一个包装器来实现这一点。