【Promise 源码学习】第十三篇 - Promise.allsettled 和 Promise.any 的实现
一,前言
上一篇,主要实现了 Promise 静态 API(类方法):Promise.race
,主要涉及以下几个点:
测试原生 Promise.race 的使用;
Promise.race 的功能与特性分析;
Promise.race 的源码实现、执行分析、功能测试;
本篇,继续实现 Promise 静态 API:Promise.allSettled
和 Promise.any
;
二,Promise.allsettled 简介
1,API 介绍
Promise.allsettled
:
批处理 promise,返回 promise;
存在失败结果也会拿到全部执行结果,不会走 catch;
解决了 Promise.all 不能拿到失败执行结果的问题;
2,原生 Promise.allsettled 功能测试
allSettled 现象:全部执行完成,返回执行结果数组(下标与按执行顺序一致)
三,Promise.allsettled 实现
原理分析
Promise.allsettled
:入参是一个 promise 集合;返回一个 Promise 实例;Promise.allsettled
内部return new Promise(...)
所有 promise 都会被执行完,并且按照执行顺序返回执行结果;
Promise.allsettled
不会走 reject,按执行顺序全部收集到数组后 resolve 返回即可;
2,代码实现
四,Promise.any 简介
1,API 介绍
Promise.any
:
批处理 promise,返回 promise;
返回第一个成功结果,全部失败才返回失败;
解决了 Promise.race 只能拿到第一个执行完成(不管成功/失败)的结果;
五,Promise.any 实现
原理分析
Promise.any
:入参是一个 promise 集合;返回一个 Promise 实例;Promise.any
内部return new Promise(...)
执行所有 promise,使用最先返回的成功结果;全部失败才判定为失败;
p.then("谁先成功就返回谁","失败了先存起来,都失败了才返回")
2,代码实现
3,功能测试
六,结尾
本篇,主要实现 Promise 静态 API:Promise.allSettled
和 Promise.any
,主要涉及以下几个点:
测试原生 Promise.allsettled 的使用;
Promise.allsettled 原理分析、源码实现、功能测试;
Promise.any 原理分析、源码实现、功能测试;
下一篇,实现一个 promisify 工具函数;
评论