promise.all和promise.race途中出現錯誤運行情況

1.promise.all

a.在使用時,如果中間不出錯返回reject,會在.then()後返回每一個promise的resolve()返回的內容。

  function p1() {
    return new Promise((resolve,reject)=>{
      console.log('成功1')
      resolve('成功1')
    })
  }
  function p2() {
    return new Promise((resolve,reject)=>{
      console.log('成功2')
      resolve('成功2')
      // reject('失敗原因')
    })
  }
  function p3() {
    return new Promise((resolve,reject)=>{
      console.log('成功3')
      resolve('成功3')
    })
  }
  Promise.all([p1(),p2(),p3()]).then((res)=>{
    console.log(res,"res")
  }).catch((err)=>{
    console.log(err,"err")
  })

  打印結果爲:

b.在使用時,如果有一項出現錯誤返回reject,會直接走catch,取到reject返回的錯誤信息,但不影響之後的promise,其他的promise會正常執行,只是結果拿不到。

  function p1() {
    return new Promise((resolve,reject)=>{
      console.log('成功1')
      resolve('成功1')
    })
  }
  function p2() {
    return new Promise((resolve,reject)=>{
      // console.log('成功2')
      // resolve('成功2')
      reject('失敗原因')
    })
  }
  function p3() {
    return new Promise((resolve,reject)=>{
      console.log('成功3')
      resolve('成功3')
    })
  }
  Promise.all([p1(),p2(),p3()]).then((res)=>{
    console.log(res,"res")
  }).catch((err)=>{
    console.log(err,"err")
  })

  打印的結果爲:

總結:1.Promise.all 裏面參數爲一個數組,數組的每一項是一個返回promise 的函數調用;

2.then 的第一個參數是所有promise都成功的調用,返回結果是一個數組,數組的每一項爲函數promise 的返回結果;

3.執行期間有一個返回rejcet則執行失敗回調,拿到的是第一個失敗得值,其他promise進程不受影響;

 

2.promise.race(只看誰先完成返回誰)

如果全部是正常resolve,看誰快返回的.then(res)結果值是誰

  function p1() {
    return new Promise((resolve,reject)=>{
      console.log('成功1')
      resolve('成功1')
    })
  }
  function p2() {
    return new Promise((resolve,reject)=>{
      console.log('成功2')
      resolve('成功2')
      // reject('失敗原因')
    })
  }
  function p3() {
    return new Promise((resolve,reject)=>{
      console.log('成功3')
      resolve('成功3')
    })
  }
  Promise.race([p1(),p2(),p3()]).then((res)=>{
    console.log(res,"res")
  }).catch((err)=>{
    console.log(err,"err")
  })

  打印結果爲:

如果第一個就出現錯誤返回reject,則走錯誤回調,返回錯誤的值

  function p1() {
    return new Promise((resolve,reject)=>{
      console.log('成功1')
      resolve('成功1')
    })
  }
  function p2() {
    return new Promise((resolve,reject)=>{
      // console.log('成功2')
      // resolve('成功2')
      reject('失敗原因')
    })
  }
  function p3() {
    return new Promise((resolve,reject)=>{
      console.log('成功3')
      resolve('成功3')
    })
  }
//注意p1,p2位置 Promise.race([p2(),p1(),p3()]).then((res)=>{ console.log(res,"res") }).catch((err)=>{ console.log(err,"err") })

  打印結果爲:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章