首页 > web前端 > js教程 > 如何按顺序执行一系列 Promise 并处理拒绝?

如何按顺序执行一系列 Promise 并处理拒绝?

Susan Sarandon
发布: 2024-11-24 13:18:11
原创
949 人浏览过

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:

如果您使用的是 Bluebird Promise 库,则可以利用其 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板