大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心
咱们在开发中,大多数时间都是一个异步操作一个异步操作去执行的,但是有一些特殊情况,需要一股脑去执行多个异步操作,比如:
这时候就可以用到Promise.all这个方法了
简单说说这个方法的使用或特性吧:
// 模拟异步操作const request = (delay, flag = true) => { return new Promise((resolve, reject) => { setTimeout(() => { if (flag) { resolve(`成功了${delay}`) } else { reject(`失败了${delay}`) } }, delay) })}const fun = async (promises) => { Promise.all(promises) .then(res => { console.log('res', res) }) .catch(error => { console.log('error', error) })}fun([request(1000), request(500)])// res [ '成功了1000', '成功了500' ]fun([request(1000), request(500, false)])// error 失败了500
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,他能直接完成我们上面所做的处理:
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' }// ]
本文链接:http://www.28at.com/showinfo-26-80519-0.htmlPromise.all 的异常处理,我希望大家一定要了解一下!
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com