2018年(273)
分类: JavaScript
2018-07-10 15:03:31
研究 Promise 的动机大体有以下几点:
对其 api 的不熟悉以及对实现机制的好奇;
很多库(比如 fetch)是基于 Promise 封装的,那么要了解这些库的前置条件得先熟悉 Promise;
要了解其它更为高级的异步操作得先熟悉 Promise;
基于这些目的,实践了一个符合 Promise/A+ 规范的
本札记系列总共三篇文章,作为之前的文章 Node.js 异步异闻录 的拆分和矫正。
在实现一个符合 Promise/A+ 规范的 promise 之前,先了解下 Promise/A+ 核心,想更全面地了解可以阅读
Promise.resolve() 括号内有 4 种情况
/* 跟 Promise 对象 */ Promise.resolve(Promise.resolve(1)) // Promise {state: "resolved", data: 1, callbackQueue: Array(0)} /* 跟 thenable 对象 */ var thenable = { then: function(resolve, reject) {
resolve(1)
}
} Promise.resolve(thenable) // Promise {state: "resolved", data: 1, callbackQueue: Array(0)} /* 普通参数 */ Promise.resolve(1) // Promise {state: "resolved", data: 1, callbackQueue: Array(0)} /* 不跟参数 */ Promise.resolve() // Promise {state: "resolved", data: undefined, callbackQueue: Array(0)} 复制代码
相较于 Promise.resolve(),Promise.reject() 原封不动地返回参数值
对于 Promise.all(arr) 来说,在参数数组中所有元素都变为决定态后,然后才返回新的 promise。