首頁  >  文章  >  web前端  >  如何按順序執行一系列 Promise 並處理拒絕?

如何按順序執行一系列 Promise 並處理拒絕?

Susan Sarandon
Susan Sarandon原創
2024-11-24 13:18:11932瀏覽

How to Execute a Sequence of Promises in Order and Handle Rejections?

如何同步一系列Promise

在這種情況下,您需要確保:

  • Promise 在同一序列中得到解析它們在數組中列出的順序。
  • 如果任何元素被拒絕,則整個序列應該拒絕。

雖然沒有直接的內建解決方案,但以下是實現此行為的方法:

使用遞歸進行手動迭代:

function sequence(arr) {
  const index = 0;

  function next() {
    if (index < arr.length) {
      arr[index]().then(next).catch(reject);
      index++;
    }
  }
  next();
}

使用減少:

function sequence(arr) {
  return arr.reduce((p, item) => {
    return p.then(() => item()); // Assuming each element is a promise-returning function
  }, Promise.resolve());
}

使用Promise.mapSeries:

如果您使用的是 Sagebird ,則可以利用其Promise.mapSeries 方法:

function sequence(arr) {
  return Promise.mapSeries(arr, item => item());
}

使用ES7非同步/等待:

如果支持,您可以使用非同步/等待來實現此目的:

async function sequence(arr) {
  const results = [];
  for (let item of arr) {
    results.push(await item());
  }
  return results;
}

使用spex 函式庫:

spex庫提供了一個序列方法,讓您可以迭代動態序列Promise:

import { sequence } from 'spex';

function sequence(nextPromise) {
  // while nextPromise() creates and returns another promise, continue resolving it;
}

請記住,如果數組中的任何元素被拒絕,則一旦遇到該拒絕,序列就會拒絕。此行為可確保不會處理更多元素。

以上是如何按順序執行一系列 Promise 並處理拒絕?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn