一、Promise.all()
用于处理同时依赖多个请求的结果,
let wake = (time) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`${time / 1000}秒后醒来`)
}, time)
})
}
let p1 = wake(3000)
let p2 = wake(2000)
Promise.all([p1, p2]).then((result) => {
console.log(result) // [ '3秒后醒来', '2秒后醒来' ]
}).catch((error) => {
console.log(error)
})
成功的时候返回的是一个数组,失败的时候返回的是最先的一个错误状态
这样的话会阻塞其他结果的执行
let wake = (time) => {
// eslint-disable-next-line promise/param-names
return new Promise((resolve, reject) => [
setTimeout(() => {
if (time >= 3000) {
console.log(111)
// eslint-disable-next-line prefer-promise-reject-errors
reject('出错了')
} else {
resolve(`${time / 1000}秒后醒来`)
}
}, time)
])
}
let p1 = wake(3000)
let p2 = wake(2000)
Promise.all([p1, p2].map(item => item.catch(e => { console.log(e); return '忽略错误' }))).then(res => {
console.log(res)
}).catch(error => {
console.log(error)
})
在经过处理之前和之后的结果
处理过后不会影响其他代码的执行,这样比较友好