promise.all()和Promise.race()学习

本文详细介绍了JavaScript中Promise.all和Promise.race的功能及用法。Promise.all用于等待所有Promise实例都完成后再进行下一步操作;Promise.race则是返回最先完成的Promise的结果。

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

Promise.all()

Promise.all()可以把多个Promise实例包装成一个新的Promise实例。

情况1:Promise.all里的Promise全返回成功,那么Promise.all返回成功,并且返回一个由里面Promise实例参数组成的数组。

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
<script type="text/javascript">
  function getDate1(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第一条数据执行完毕");
        resolve("date1");
        },1000)
    });
  }
    function getDate2(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第二条数据执行完毕");
        resolve("date2");
        },1000)
    });
  }
  function getDate3(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第三条数据执行完毕");
        resolve("date3");
        },1000)
    });
  }
  function getDate4(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第四条数据执行完毕");
        resolve("date4");
        },5000)
    });
  }
  let p=Promise.all([getDate1(),getDate2(),getDate3(),getDate4()]);
  p.then(()=>{},e=>{
    console.log(e);
  })
</script>
</body>
</html>

情况2:Promise.all里的Promise有一个返回失败,那么Promise.all返回失败,并且失败的Promise执行reject代码,成功的Promise执行resolve代码。

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
<script type="text/javascript">
  function getDate1(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第一条数据执行完毕");
        resolve("date1");
        },1000)
    });
  }
    function getDate2(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第二条数据执行完毕");
        resolve("date2");
        },1000)
    });
  }
  function getDate3(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第三条数据执行完毕");
        resolve("date3");
        },1000)
    });
  }
  function getDate4(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        // console.log("第四条数据执行完毕");
        reject("date4 err");
        },500);
    });
  }
  let p=Promise.all([getDate1(),getDate2(),getDate3(),getDate4()]);
  p.then(()=>{},e=>{
    console.log(e);
  })
</script>
</body>
</html>

情况3:Promise.all()传入一个空数组,立即返回成功。

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
<script type="text/javascript">
  function getDate1(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第一条数据执行完毕");
        resolve("date1");
        },1000)
    });
  }
    function getDate2(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第二条数据执行完毕");
        resolve("date2");
        },1000)
    });
  }
  function getDate3(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第三条数据执行完毕");
        resolve("date3");
        },1000)
    });
  }
  function getDate4(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        // console.log("第四条数据执行完毕");
        reject("date4 err");
        },500);
    });
  }
  let p=Promise.all([]);
  p.then(()=>{
    console.log("aaaaa");
  },e=>{
    console.log(e);
  })
</script>
</body>
</html>

Promise.race()

Promise.race([p1, p2, p3])里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。

  function getDate1(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第一条数据执行完毕");
        resolve("data1");
        },1000)
    });
  }
    function getDate2(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第二条数据执行完毕");
        resolve("data2");
        },300)
    });
  }
  function getDate3(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        console.log("第三条数据执行完毕");
        resolve("data3");
        },1000)
    });
  }
  function getDate4(){
    return new Promise((resolve,reject)=>{
      setTimeout(()=>{
        // console.log("第四条数据执行完毕");
        reject("data4 err");
        },500);
    });
  }
  let p=Promise.race([getDate1(),getDate2(),getDate3(),getDate4()]);
  p.then(data=>{
    console.log(data);
  },e=>{
    console.log(e);
  })

Promise.race()传入空数组不做任何操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值