Promise.all与Promise.race的实现

Promise.all的实现

    const p1 = new Promise((resolve,reject) => {
      setTimeout(() => {
        resolve({data: { name: 'p1'}})
      },10)
      // 异常情况reject('异常原因')
    })
    const p2 = new Promise((resolve,reject) => {
      setTimeout(() => {
        resolve({data: { name: 'p2'}})
      },30)
      // 异常情况reject('异常原因')
    })
    const Promise_all = function(promiseArr) {
      return new Promise((resolve,reject) => {
        let result = []
        if (Array.isArray(promiseArr) && promiseArr.length) {
          promiseArr.forEach(promise => {
              promise.then(res => {
                result.push(res)
                // 确保所有promise都是完成状态,然后返回
                if(result.length === promiseArr.length) {
                  console.log(result)
                  resolve(result)
                }
              },(err) => {
                reject(err)
              })
          });
        } else {
          reject('参数必须是数组')
        } 
      })
    }
    Promise_all([p1,p2]).then(resArr => {
      console.log(resArr)
    }, err => {
      console.log(err)
    })

    /*
     * (2) [{…}, {…}]
     * 0: data: {name: "p1"}
     * 1: data: {name: "p2"}
     */

Promise.race的实现

    const p1 = new Promise((resolve,reject) => {
      setTimeout(() => {
        resolve({data: { name: 'p1'}})
      },30)
      // 异常情况reject('异常原因')
    })
    const p2 = new Promise((resolve,reject) => {
      setTimeout(() => {
        resolve({data: { name: 'p2'}})
      },10)
      // 异常情况reject('异常原因')
    })
    const Promise_race = function(promiseArr) {
      return new Promise((resolve,reject) => {
        if (Array.isArray(promiseArr) && promiseArr.length) {
          promiseArr.forEach(promise => {
              promise.then(res => {
                resolve(res)
              },(err) => {
                reject(err)
              })
          });
        } else {
          reject('参数必须是数组')
        } 
      })
    }
    Promise_race([p1,p2]).then(resArr => {
      console.log(resArr)
    }, err => {
      console.log(err)
    })
    /*
    * {data: {name: "p2"}}
    */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值