/*
* promise.all()该方法用于将多个Promise实例,包装成一个新的Promise实例。
var p = Promise.all([p1,p2,p3]);
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数
*/
// 模拟异步接口请求
const request = function (delay = '1000') {
const p = new Promise((resolve, reject) => {
setTimeout(() => {
if (delay >= 2000) { // 大于等于两千毫秒的 设置状态reject()
reject(delay)
} else {
resolve(true)
}
}, delay);
})
return p
}
//批量发起请求(模拟接口异常)
async function rejectHandle() {
let arr = []
for (let i = 0; i < 3; i++) {
console.log(i);
arr.push(request(1000 * i))
}
console.log(arr); //[[Promise, Promise, Promise]
Promise.all(arr).then((res) => { //promise.all批量结果获取
console.log(res); //Uncaught (in promise) 2000
})
}
rejectHandle()
// 需要注意的是,promise.all()成功时,在then(result)中result是个数组
//批量发起请求(模拟接口全部正常)
async function successHandle() {
let arr = []
for (let i = 0; i < 3; i++) {
console.log(i);
arr.push(request(1000))
}
console.log(arr); //[[Promise, Promise, Promise]
Promise.all(arr).then((res) => { //promise.all批量结果获取
console.log(res); // [true, true, true]
})
}
successHandle()