用axios.all发送多个发请求的时候,什么时候会进入.then方法?

用axios.all发送多个发请求的时候,什么时候会进入.then方法?

 Axios.all(\[request1, request2, request3\])
    .then( Axios.spread((res1, res2, res3) => { 
        console.log('全部加载完成') 
    })).catch(err => { 
    console.log(err.response)
 });
阅读 4k
3 个回答

then接受两个回调函数,一个成功success,一个失败fail

axios.all 如果全部成功走success,如果有一个失败,则立刻走fail。

即全部成功或者其中某一个失败时立刻决议。

可以做个测试,让中途某个Promise失败。

function test() {
  let p1 = new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('success, 1')
      resolve(1)
    }, 1000)
  })
  
  let p2 = new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('fail, 2')
      reject(2)
    }, 2000)
  })
  
  let p3 = new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('success, 3')
      resolve(3)
    }, 3000)
  })
  
  axios.all([p1, p2, p3]).then(res => {
    console.log(res)
    console.log('all done')
  }, error => {
    console.log(error)
    console.log('someone failed')
  })
}

test()

输出:

> success, 1
> fail, 2
> 2
> someone failed
> success, 3

这里3个Promise,分别计时1s,2s,3s决议,其中第二个返回失败,可以看到axios.all的then中,失败回调函数被触发了。并且在第三个promise决议之前就触发。

所以就是中途某个Promise失败就会走失败回调,若完全成功则走成功回调。

多个请求都完成(成功或失败)的时候

多个接口同时完成后,然后在执行一些逻辑

request1, request2, requset3 都请求成功返回的时候,就会进入 then()
如果请求失败则进入 catch()

官网文档 并发