Web 技术研究所

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

Promise 技术细节(4)

  Promise 对象在 resolve 时会进一步解析层层嵌套的 thenable 对象,直至得到一个非 thenable 对象。但是这个 thenable 对象会被如何处理呢?以及上面的 then 何时被执行?实际上对于 thenable 的解析,目前的 Chrome 实现存在一个比较严重的 Bug。
  当 Promise 对象的 resolve 被执行时,thenable 对象会被放入下一个 PromiseJobs 中等待执行。执行 thenable 上的 then 方法时,会传入一对新创建的 resolve 和 reject 函数,并藉由这对函数来决定这个 Promise 对象的执行方向。
  Firefox 上的实现是正确的,而 Chrome 目前的实现则是做了过度的优化导致了错误。当这个 Promise 对象上没有挂载任何 then 时,resolve 的 thenable 并不会被处理。如果仅仅是如此也不太影响使用,但 Chrome 还有更丧心病狂的 Bug。thenable 对象上的 then 方法会因为 Promise 对象被挂载多个 then 而被执行多次。比如下面代码 var inc = 0; var promise = new Promise(resolve => { resolve({ then: () => console.log(inc++) }); }); promise.then(); promise.then(); promise.then();   甚至这个 promise 对象每次 then 可以是不同的结果 var inc = 0; var promise = new Promise(resolve => { resolve({ then: resolve => resolve(inc++) }); }); promise.then(result => console.log(result)); promise.then(result => console.log(result)); promise.then(result => console.log(result));   至于你瞎没瞎,反正我的狗眼是瞎了 = =。。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^