深入透析Promise几种方法(含手撕思路讲解及坑点)

本文深入解析Promise的all和race方法,包括它们的介绍、实例、代码实现过程,以及在实现过程中遇到的问题和解决方案,帮助读者理解和掌握Promise的这两种常用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

前面我们简单实现了一个promise,不懂的同学,传送门:深入透析Promise

那么,除了它本身意外,我们用的最多的恐怕就是all、race方法了吧?

什么?你不知道是啥?别担心,下面让我们一起探探究竟吧!

一、Promise.all()

1.介绍

官方介绍:Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。

例如:

// 注意!方法的入参必须是一个可迭代器(iterable),比如数组。
const p = Promise.all([p1, p2, p3]);

Promise.all(iterable) 方法返回一个 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败原因的是第一个失败 promise 的结果

步骤可简化为:

  1. 只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
  2. 只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。

2.实例

状态全为fulfilled

	  //0.5s后转化为fulfilled状态
      let p1 = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve("p1");
        }, 1000);
      });

      //直接转化为fulfilled状态
      let p2 = new Promise((resolve, reject) => {
        resolve("p2");
      });

      Promise.all([p1, p2])
        .then((res) => {
          console.log(res);
        })
        .catch((err) => {
          console.log(err);
        });

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值