Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Promise 技术细节(3)

  在 Promise 中,每个 then 都是互相隔离的,也无法知晓一个 Promise 对象上绑定了多少个 then。所以如果将 Promise 视为状态机的话,只要是非 Pending 状态,并且 PromiseStatus 和 PromiseValue 这两个内部属性相同的 Promise 对象就可以视为等价的。
  Promise/A+ 中没有限制 then 返回的引用,也就是说状态完全相同的 Promise,可能是同一个引用。下面这个代码中 then 没有传入任何东西,也就是 resolve 和 reject 方向的结果都是从上游流下来的。那么 x 和 y 是两个状态完全相同相同的对象。 var x = Promise.resolve(123); var y = x.then(); x.then(data => console.log(data)); y.then(data => console.log(data)); console.log(x === y);   但即便对象的状态完全相同,ES6 的 Promise 实现也是创建一个新的 Promise 对象作为 then 的返回值。以前刚了解到 Promise/A+ 允许 then 的返回值等于对象自身时以为 Promise 对象的实现可以偷懒地返回自身。后来越想越不对劲,虽然 then 随随便便地返回自身,那就和其它描述矛盾了?后来才明白,所谓返回自身是指在满足其它条件的前提下,如果实现基于节省内存之类的意图来共用等价的 Promise 对象,这时候才「允许」then 方法返回自身对象。
  上面的例子中,虽然 ES6 的 Promise 实现会让 x 永远都不等于 y,但还是不建议依赖这一点。因为其它 Promise 变种实现未必会与 ES6 保持一致。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^