[Uni-App]探索Promise更多秘密

导语
对于初学者,理解并应用 Promise 已是一大挑战;但当你熟悉了基础后,Promise 的进阶用法将助你提升代码质量至新的境界。本文将引导你走进 Promise 的进阶领域,让异步编程更上一层楼。

一、Promise.all()

在某些场景中,我们需要确保多个异步操作全部完成后再进行下一步。Promise.all() 可以帮助我们实现这一需求。

let promise1 = fetch('api1');
let promise2 = fetch('api2');
let promise3 = fetch('api3');

Promise.all([promise1, promise2, promise3]).then(values => {
  console.log(values); // 所有API的返回值数组
}).catch(err => {
  console.error(err); // 任何一个失败,都会进入此catch
});

二、Promise.race()

Promise.all() 相反,有时我们希望多个异步操作中只要有一个完成,就立刻进行下一步。这时 Promise.race() 就派上了用场。

let timeout = new Promise((resolve, reject) => {
  setTimeout(reject, 5000, 'Request timed out');
});
let fetchRequest = fetch('some-api');

Promise.race([timeout, fetchRequest]).then(data => {
  console.log(data); // api返回的数据
}).catch(err => {
  console.error(err); // 超时或其他失败原因
});

三、Promise.allSettled()

当我们关心多个异步操作的全部结果(无论成功还是失败),但不需要它们全部成功才进入下一步,我们可以使用 Promise.allSettled()

let promise1 = fetch('api1');
let promise2 = fetch('non-existent-api');
let promise3 = fetch('api3');

Promise.allSettled([promise1, promise2, promise3]).then(results => {
  results.forEach(result => {
    if (result.status === 'fulfilled') {
      console.log(result.value);
    } else {
      console.error(result.reason);
    }
  });
});

四、Promise.any()

Promise.any() 是一个较新的特性,它接受一个 Promise 的可迭代对象作为参数,当其中的任何一个 Promise 完成(fulfills)时返回,若全部失败,则抛出一个 AggregateError

let promise1 = Promise.reject('1st failure');
let promise2 = Promise.reject('2nd failure');
let promise3 = fetch('some-working-api'); // 假设这是一个正常工作的API

Promise.any([promise1, promise2, promise3]).then(data => {
  console.log(data); // api返回的数据
}).catch(err => {
  console.error(err); // 所有Promise失败的原因
});

五、错误处理的艺术

正确处理错误是编写健壮代码的关键。Promise 提供了多种错误处理机制。为了避免常见的 “unhandled promise rejection” 错误,始终确保在 Promise 链的末尾有一个 catch()

六、结语

随着 Promise 的广泛应用,其相关的 API 和特性也在不断地发展。为了编写更加健壮、高效的异步代码,深入理解并灵活应用 Promise 的进阶特性是至关重要的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值