通过promise等方式实现
- 先来巩固下promise.all()
Promise.all可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组,而失败的时候则返回最先被reject失败状态的值。
- 问题来了,上面所说的,若有一个请求失败,则会直接返回失败的值,那怎么保证不管请求是否成功,最终都返回有序的值呢?
1、方案一:对每个请求进行catch错误捕获,如下:
const list = [this.getFun(),this.getFun1(),this.getFun2()]
// const res = await Promise.all(list) 将此行代码改写成下方代码:
//catch错误,直接return空值
const res = await Promise.all(list.map(item=> item.catch(err => '')))
2、方案二:使用es11中的promise.allSettled
新增的方法,不管请求列表返回的结果是rejected还是fulfilled,都会返回相应的状态和结果值。
- 额外补充ES12新增的promise方法
promise.any
方法,异步方法一旦有一个是fulfilled状态,就会返回这个结果,如果都为rejected状态。则catch到第一个err,并告知all promise were rejected