Promise.all與allSettled

部分摘自MDN數組

Promise.all(iterable)

  • 此實例在 iterable 參數內全部的 promise 都「完成(resolved)」或參數中不包含 promise 時回調完成(resolve)
  • 若是參數中 promise 有一個失敗(rejected),此實例回調失敗(reject),失敗的緣由是第一個失敗 promise 的結果。

咱們來看例子1promise

const promise1 = Promise.resolve(3);
const promise2 = 42;

const promiseList = [promise1,promise2]

Promise.all(promiseList)
.then((values) => {
  console.log(20, values) //會輸出3, 42
})
.catch(err => {
  console.log(22, err)
})
複製代碼

例子2ui

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => reject('我是失敗的Promise_1'))
const promise4 = new Promise((resolve, reject) => reject('我是失敗的Promise_2'))
const promiseList = [promise1,promise2,promise3, promise4]

Promise.all(promiseList)
.then((values) => {
  console.log(20, values) //不會走這裏的回調
})
.catch(err => {
  console.log(22, err) //輸出 `我是失敗的Promise_1` 只會返回第一個reject而中斷
})
複製代碼

問題: 沒法準確的定位錯誤,因此就有了Promise.allSettledspa

Promise.allSettled()

  • 該Promise.allSettled()方法返回一個在全部給定的promise已被決議或被拒絕後決議的promise,並帶有一個對象數組,每一個對象表示對應的promise結果。
  • 若是咱們請求多個接口須要統計錯誤的次數,就能夠用到此方法.

例子3d

const promise1 = Promise.resolve(3);
  const promise2 = 42;
  const promise3 = new Promise((resolve, reject) => reject('我是失敗的Promise_1'))
  const promise4 = new Promise((resolve, reject) => reject('我是失敗的Promise_2'))
  const promiseList = [promise1,promise2,promise3, promise4]
  
  Promise.allSettled(promiseList).then(values=>{
    console.log(26, values)
  })
複製代碼

輸出結果:code

  • promise 一共有三個狀態pending、fulfilled、rejected(未決定,履行,拒絕)
相關文章
相關標籤/搜索