1.promise.all
来MDN的介绍:
Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且只返回一个Promise实例, 那个输入的所有 promise 的 resolve 回调的结果是一个数组。这个Promise的 resolve 回调执行是在所有输入的 promise 的 resolve 回调都结束,或者输入的 iterable 里没有 promise 了的时候。它的 reject 回调执行是,只要任何一个输入的 promise 的 reject 回调执行或者输入不合法的 promise 就会立即抛出错误,并且 reject 的是第一个抛出的错误信息。
- Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入。 ➡️ 说明所传参数都具有Iterable,也就是可遍历。
- 并且只返回一个Promise实例。➡️ 说明最终返回是一个Promise对象。
- 那个输入的所有promise的resolve回调的结果是一个数组。➡️ 说明最终返回的结果是个数组,且数组内数据要与传参数据对应。
- 这个Promise的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。➡️ 说明最终返回时,要包含所有的结果的返回。
- 它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。➡️ 说明只要一个报错,立马调用reject返回错误信息。
1 | function promiseAll(iterator) { |
2.promise.race
1 | function promiseRace(promises) { |
3.Promise.prototype.finally
finally()
方法用于指定不管 Promise
对象最后状态如何,都会执行的操作(无论promise
被reslove
或者reject
,都会执行到finally
里面去)finally
方法的回调函数不接受任何参数,这意味着没有办法知道,前面的 Promise
状态到底是fulfilled
还是rejected
。这表明,finally
方法里面的操作,应该是与状态无关的,不依赖于 Promise
的执行结果。
1 | Promise.prototype.finally = (callback) => { |