面试官:循环请求接口,过程中有一个报错,不中断,先全部请求完,最后返回是哪个报错提示给用户。
Promise.all 一个报错绕过reject,先全部返回,后处理
可被链式调用
构造函数 Promise()
创建一个新的 Promise 对象。
静态方法
Promise.all(iterable)
原则上Promise.all只要一个reject了全员不过,为了解决这个问题: 下面是先让过,后面再提示,例子如下:
Promise.all() 方法接收一个promise的iterable类型(注:Array,Map,Set都属于ES6的iterable类型)的输入,并且只返回一个Promise实例, 那个输入的所有promise的resolve回调的结果是一个数组。这个Promise的resolve回调执行是在所有输入的promise的resolve回调都结束,或者输入的iterable里没有promise了的时候。它的reject回调执行是,只要任何一个输入的promise的reject回调执行或者输入不合法的promise就会立即抛出错误,并且reject的是第一个抛出的错误信息。
const arr = [1, 2, 3]
promiseArr () {
return arr.map(v => {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (v % 2 === 0) {
resolve(v)
} else {
reject('err' + v)
}
}, 1000)
})
})
}
Promise.all(promiseArr.map(v => v.catch(e => {})))
.then(res => {
// 这里res 会返回 [err1, 2, err3]
}
.catch(() => {})