Web 技术研究所

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

Promise 技术细节(1)

  从 Promise 的 resolve 到 then 总是异步的,但是一个 Promise 对象不仅仅是一个 resolve 对应一个 then,而可能是一个 resolve 对应多个 then。从 resolve 到 then 的过程总是异步的没错,但在同一个 Promise 对象上的多个 then 之间的同异步关系又如何呢?
  光说没卵用,还是写代码跑跑看吧? var $p = Promise.resolve(); $p.then(() => console.log(1)); Promise.resolve().then(() => console.log(1.5)); $p.then(() => console.log(2));   这个代码的结果是 1、1.5、2,其中 1.5 这个结果会被插入到两次 then 之间。也就是说多个 then 之间也是异步关系,这些 then 是有执行间隔的,中间可以被插入别的代码。
  如果把 Promise 对象上绑定的所有 then 视为一个 queue 的话,那么它在 resolve 时不是简单地遍历执行每一个回调,而是将这个 queue 逐个放入消息队列的末尾。
// 大概是这样 while(promiseQueue.length) setImmediate(promiseQueue.shift(), promiseValue); // 并不是这样 while(promiseQueue.length) promiseQueue.shift()(promiseValue);   对于一个已经 resolved 的 Promise 对象,它的 then 也不会因为 resolve 的结果已经产生而被同步执行。
  所以,then 永远是异步的。
网名:
54.144.24.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^