多接口调用,使用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() 有一个子实例成功就算成功,全部子实例失败才算失败。

猜你喜欢

转载自blog.csdn.net/weixin_35773751/article/details/125381722