多接口调用,使用Promise.all、Promise.race和Promise.any
大纲
1.Promise.all
2.Promise.race
3.Promise.any
1.Promise.all 使用
说明:
Promise.all
可以将多个Promise实例包装成一个新的Promise实例。同时,成功和失败的返回值是不同的,成功的时候返回的是一个结果数组
,而失败的时候则返回最先被reject失败状态的值
。
实例:
let p1 = new Promise((resolve, reject) => {
resolve('成功1')
})
let p2 = new Promise((resolve, reject) => {
resolve('成功2')
})
let p3 = new Promise((resolve, reject) => {
reject(new Error('失败')) // 直接写错误ESLint报错,需要reject(new Error(0))写法
})
Promise.all([p1, p2]).then((result) => {
console.log(result, '成功1--')
}).catch((error) => {
console.log(error, '失败')
})
Promise.all([p1, p2, p3]).then((result) => {
console.log(result, '成功2--')
}).catch((error) => {
console.log(error)
})
结果:
Promise.all
获得的成功,数组里面的数据顺序和Promise.all接收到的数组顺序是一致的;多个请求
数据的过程中,按照顺序获取和使用数据的场景
;失败
的时候则返回最先被reject失败状态
。
打印结果:
2.Promise.race 使用
说明:
Promse.race
意思就是说,Promise.race([p1, p2, p3])
里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态
。
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
},1000)
})
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('失败'))
}, 500)
})
Promise.race([p1, p2]).then((result) => {
console.log(result)
}).catch((error) => {
console.log(error) // 打开的是 'failed'
})
结果:
3.Promise.any
说明:
Promise.any()
方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。
Promise.any()
有一个子实例成功就算成功,全部子实例失败才算失败。