几个问题,Q 是否有一个 bind()
方法,如 BlueBird API 中所示还有这张幻灯片 JavaScript Promises ~Kerrick Long ?它是核心 promise /A+ 规范的一部分吗?如果没有,是否有 polyfill 或解决方法?
最佳答案
嗯,Promises/A+ 规范只指定了 .then
的工作方式,所以 .bind
不是 Promises/A+ 规范的一部分。事实上,Promises/A+ 指定 this
值的行为就像一个普通的函数调用,并且 promises 不受约束 - Bluebird 通过返回一个 BoundPromise 来绕过这个限制,它不是一个常规的 promise 并且与其他 promise 无缝互操作图书馆。
没有等效的 Q 功能,一旦 ES6 落地,您将能够使用“粗箭头”=>
以便在词法上绑定(bind) then
中的范围链式:
this.x = 15;
Q().then(() => console.log(this.x)) // always logs 15
一般来说,这是 Bluebird 相对于 Q 的众多特性之一,没有明显的方法来“填充它”,因为它改变了 .then
的行为 - 你必须重写.then
在 Q 中 promise 并有效地在整个库上创建一个包装器来实现这一点。
关于javascript - Q Promise 等效于 BlueBird Promise.Bind(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25509977/