Open jtwang7 opened 2 years ago
Promise.all
在开发中,大多数时间都是一个异步操作一个异步操作去执行的,但是有一些特殊情况,需要一股脑去执行多个异步操作,比如:
❇️ Promise.all
从 Promise.all 的运行中我们发现,若 promises 中有一个请求出错的话,整体 promises 就会被中断且只会输出这个失败的状态,而忽略了其他成功的值。假如我们不希望某种错误影响到并行请求的结果输出时,就需要对 Promise.all 做一层静默处理:
✅ 方法一:在传入 promises 前,先对 promises 中的每个 promise 对象都优先捕获自身的错误,防止错误向外传播到 Promise.all 方法内。
const fun = async (promises) => { Promise.all( promises.map(promise => { return promise.catch(err => err) }) ) .then(res => { console.log('res', res) }) } fun([request(1000), request(500, false)]) // res [ '成功了1000', '失败了500' ]
✅ 方法二:在ES2020中,JavaScript提供了一个新语法 Promise.allSettled,他能直接完成我们上面所做的处理 Promise.allSettled
Promise.allSettled
const fun = async (promises) => { Promise.allSettled(promises) .then(res => { console.log('res', res) }) } fun([request(1000), request(500, false)]) // res [ // { status: 'fulfilled', value: '成功了1000' }, // { status: 'rejected', reason: '失败了500' } // ]
Promise.all
的错误捕获在开发中,大多数时间都是一个异步操作一个异步操作去执行的,但是有一些特殊情况,需要一股脑去执行多个异步操作,比如:
Promise.all
这个方法。❇️
Promise.all
从
Promise.all
的运行中我们发现,若 promises 中有一个请求出错的话,整体 promises 就会被中断且只会输出这个失败的状态,而忽略了其他成功的值。假如我们不希望某种错误影响到并行请求的结果输出时,就需要对Promise.all
做一层静默处理:✅ 方法一:在传入 promises 前,先对 promises 中的每个 promise 对象都优先捕获自身的错误,防止错误向外传播到 Promise.all 方法内。
✅ 方法二:在ES2020中,JavaScript提供了一个新语法
Promise.allSettled
,他能直接完成我们上面所做的处理 Promise.allSettled