【Promise 源码学习】第十二篇 - Promise.race 的实现
一,前言
上一篇,主要实现 Promise 的核心静态 API(类方法):Promise.all
,主要涉及以下几个点:
测试原生 Promise.all 的使用;
Promise.all 的功能与特性分析;
Promise.all 的源码实现、执行分析、功能测试;
本篇,继续实现 Promise 静态 API(类方法):Promise.race
;
备注:
Promise.race 与 Promise.all 实现原理相似;有了 all 的基础 race 就非常简单了;
Promise.race 面试高频考察点,主要用于解决超时中断问题;
二,Promise.race 简介
API 介绍
race:译为“比赛”、“赛跑”;MDN 参考资料
Promise.race
功能(与 Promise.all 对比)
Promise.all
:
批处理 promise,返回 promise;
全部成功才成功,返回全部结果;
一个出错就失败,返回第一个失败结果;
Promise.race
:
批处理 promise,返回 promise;
无论成功还是失败,谁快就返回谁;
2,原生 Promise.race 功能测试
备注:
虽然
Promise.race
在 1 秒后就返回了结果,但实际一共执行了 3 秒才完成;如果数组传入数字,会直接返回成功;
三,Promise.race 实现
原理分析
Promise.race
:入参是一个 promise 集合;返回一个 Promise 实例;Promise.race
内部return new Promise(...)
执行所有 promise,使用最先返回的结果(不管成功还是失败);
p.then(resolve, reject)
就看谁先进入 then;
2,代码实现
3,功能测试
传入数字、成功/失败 promise,表现与原生 promise 一致
四,Promise.race 应用:解决超时问题
借助 Promise.race
特性,为 promise 绑个炸弹:
超时了,就直接引爆:
五,结尾
本篇,主要实现了 Promise 静态 API(类方法):Promise.race
,主要涉及以下几个点:
测试原生 Promise.race 的使用;
Promise.race 的功能与特性分析;
Promise.race 的源码实现、执行分析、功能测试;
下一篇,继续 Promise 静态 API:Promise.allSettled
和 Promise.any
;
评论