Promise.all()的方法的原生实现(1024程序员节)

本文解释了Promise.all方法如何同步多个Promise,当所有Promise状态变为fulfilled时返回成功数组,任一Promiserejected则整体失败。Promise.race则用于快速获取最先完成的Promise结果。两者在处理异步操作中的场景应用举例。
摘要由CSDN通过智能技术生成

Promise.all()方法:

function PromiseAll (promises) {
  return new Promise((resolve, reject) => {
    if (!Array.isArray(promises)) {
      return reject(new TypeError('error'));
    }
    const results = [];
    const completeCount = 0;
    if (promises.length === 0) {
      return resolve(results)
    }
    promises.forEach((promise, index) => {
      Promise.resolve(promise).then((result) => {
        result[index] = result;
        completeCount++;
        if (completeCount === promises.length) {
          resolve(results)
        }
      })
      .catch(reject)
    })
  })
}

Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。

promise.all()该方法用于将多个Promise实例,包装成一个新的Promise实例。

   var p=Promise.all([p1,p2,p3]);

(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。

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

promise.all()

 比如当数组里的P1,P2都执行完成时,页面才显示。
 值得注意的是,返回的数组结果顺序不会改变,即使P2的返回要比P1的返回快,顺序依然是P1, P2

    Promise.all成功返回成功数组,失败返回失败数据,一但失败就不会继续往下走
 

promise.race( )

Promise.race是赛跑的意思,也就是说Promise.race([p1, p2, p3])里面的结果哪个获取的快,就返回哪个结果,不管结果本身是成功还是失败

 使用场景: Promise.all和Promise.race都是有使用场景的。 有些时候我们做一个操作可能得同时需要不同的接口返回的数据,这时我们就可以使用Promise.all; 有时我们比如说有好几个服务器的好几个接口都提供同样的服务,我们不知道哪个接口更快,就可以使用Promise.race,哪个接口的数据先回来我们就用哪个接口的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结果才重要

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值