浅谈Promise的等待机制和赛跑机制

等待机制(Promise.all): 使用 Promise.all 方法可以同时等待多个 Promise 对象的完成。只有当所有的 Promise 都成功解析时,返回的 Promise 才进入 resolved 状态,将每个 Promise 的解析结果以数组形式传递给 then() 方法;如果任何一个 Promise 失败拒绝,则返回的 Promise 会进入 rejected 状态,并传递第一个失败的 Promise 的拒绝原因给 catch() 方法。

const promise1 = Promise.resolve('Success 1');
const promise2 = Promise.resolve('Success 2');
const promise3 = Promise.resolve('Success 3');

Promise.all([promise1, promise2, promise3])
  .then((results) => {
    console.log(results); // ['Success 1', 'Success 2', 'Success 3']
  })
  .catch((error) => {
    console.error(error);
  });

在上述示例中,使用 Promise.all 方法同时等待三个 Promise 对象的完成。由于每个 Promise 都成功解析,返回的 Promise 进入 resolved 状态,并将每个 Promise 的解析结果以数组形式传递给 then() 方法。

赛跑机制(Promise.race): 使用 Promise.race 方法可以监听多个 Promise 对象中最先解决或拒绝的那一个,并返回对应的 Promise。无论是被解析还是被拒绝,Promise.race 方法都会返回第一个完成的 Promise 结果或错误。

const promise1 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('Promise 1 resolved');
  }, 2000);
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(() => {
    reject(new Error('Promise 2 rejected'));
  }, 1000);
});

Promise.race([promise1, promise2])
  .then((result) => {
    console.log(result); // 'Promise 2 rejected'
  })
  .catch((error) => {
    console.error(error); // Error: Promise 2 rejected
  });

在上述示例中,使用 Promise.race 方法监听两个 Promise 对象。即使 promise1 的解析时间更长,但是由于 promise2 先于 promise1 被拒绝,返回的 Promise 进入 rejected 状态,并将 promise2 的拒绝原因传递给 catch() 方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值