如何正确地使用 Promise.allSettled

如何正确地使用 Promise.allSettled

Promise.allSettled 是 ES2020 引入的一个新方法,它可以在一次性获取所有的 promise 结果,而不需要手动处理每一个 promise 结果。正确地使用 Promise.allSettled 可以大幅度提升代码的可读性和可维护性。

1. Promise.allSettled 的用途

Promise.allSettled 可以接收一个 promise 数组作为参数,返回的结果是一个 promise 对象。这个 promise 对象的状态只有两种:fulfilled 和 rejected。

无论是哪种状态,Promise.allSettled 都会把每个 promise 结果包装成一个对象,对象中包含三个属性:

  • status(状态):'fulfilled' 或 'rejected'。
  • value(结果值):如果 status 是 'fulfilled' 则为返回值,否则为错误信息。
  • reason(失败原因):如果 status 是 'fulfilled' 则为 undefined,否则为错误信息。
----- -------- - -------------------
----- -------- - ------------------------
----- -------- - --- --------------- -- ------------------- -------

----------------------------- --------- ---------------------- -- -
  --------------------
---

-- ------
-- -
--   - ------- ------------ ------ - --
--   - ------- ----------- ------- ------- --
--   - ------- ------------ ------ --------- --
-- -

2. Promise.allSettled 的优点

Promise.allSettled 和 Promise.all 有点相似,但 Promise.all 只有在所有 promise 都成功时才返回结果,如果任意一个 promise 失败,就直接 reject。这样的设计不够灵活,也不够实用。

Promise.allSettled 弥补了 Promise.all 的缺陷,不管成功或失败,它都会得到所有 promise 结果。这个特性非常适合在处理多个任务的情况下使用。

----- ----- - --------- -------- ---------

-------------------------------------- -- -
  ---------------------- -- -
    -- -------------- --- ------------ -
      --------------------------
    - ---- -
      ---------------------------
    -
  --
---

3. Promise.allSettled 的几个注意点

3.1 兼容性

Promise.allSettled 是 ES2020 中引入的,在使用前需要先判断浏览器是否支持该特性。可以使用 Polyfill 方式进行兼容处理。

-- --------------------- -
  ------------------ - ------------------ -
    ------ -------------------------------- -- -
      ------ -------
        ----------- -- -
          ------ - ------- ------------ ----- --
        -- ------ -- -
          ------ - ------- ----------- ------ --
        ---
    ----
  --
-

3.2 allSettled 的执行顺序

Promise.allSettled 并不会在任务全部结束后才 resolve,而是无论结果如何,立即返回所有结果。这意味着在需要等待所有任务完成的情况下,需要使用 async/await 或者其他手段进行处理。

----- ----- - --------- -------- ---------

-------------------------------------- -- -
  ---------------- ----- -----------
---

------------------ --------

-- ------
-- ----- -----
-- --- ----- --------

3.3 allSettled 的内存问题

Note that the array returned by this function will not be freed even if the returned Promise is rejected.

在执行完 Promise.allSettled 后,返回的结果数组仍然会被保存在内存中,不管是否有 promise 失败,都是如此。因此,处理大量 promise 的情况下,可能会造成内存问题。

4. Promise.allSettled 的示例代码

以下是 Promise.allSettled 的一个示例代码,里面包含了多个异步请求的处理。

-- ------- ------- --
-------- ------------ -
  ------ --- ----------------- ------- -- -
    ----- --- - --- -----------------
    --------------- ---- ------
    ---------- - ---------- -
      --------------------------------------
    --
    ----------- - ---------- -
      --------------- --------
    --
    ---------------
  ---
-

-- ------
----- -------- - ----------------------------------------
----- -------- - ----------------------------------------
----- -------- - ----------------------------------------

-- --------
----------------------------- --------- ----------------------- -- -
  ---------------------- -- -
    -- -------------- --- ------------ -
      --------------------------
    - ---- -
      ---------------------------
    -
  ---
---------- -- -
  ---------------
---

5. 总结

正确使用 Promise.allSettled 可以大大提高代码的可读性和可维护性。但在使用过程中也需要注意兼容性、执行顺序和内存问题等方面。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65408dac7d4982a6eba0ed88


猜你喜欢

  • Angular 中使用 compile 服务编译模板的应用场景

    介绍 在 Angular 中,compile 是一个允许我们在运行时动态编译并修改模板的服务。通过使用 compile,我们可以让 Angular 程序更加灵活,并且可以实现一些非常有用的功能。

    1 年前
  • ES6 中的数组扩展方法初探

    随着 Web 技术的不断升级,前端开发也在持续发展。其中,ES6 (ECMAScript 6)是一种新的 JavaScript 标准,引入了一些新的语法和特性来加强 JavaScript 的能力。

    1 年前
  • 使用 ASP.NET Core 和 SignalR 实现 Server-Sent Events

    Server-Sent Events (SSE) 是一种在 Web 应用程序中实现服务器向客户端推送事件的技术。使用 SSE 技术,可以通过简单的 HTTP 连接实时向客户端发送事件和消息。

    1 年前
  • MongoDB 读写性能变差,该如何处理?

    背景 MongoDB 是当前十分流行的 NoSQL 数据库之一,它具有高速、灵活、可扩展性强等优点,在前端项目中被广泛应用。然而,若数据量逐渐增加,读写性能却有可能急剧下降,这将影响后续业务的开展,所...

    1 年前
  • 解决 Next.js 在 Heroku 上的 404 问题

    引言 Next.js 是一款非常流行的 React 框架,它可以帮助我们快速构建基于 React 的 SSR 应用程序。Heroku 是一个流行的云平台,它可以帮助开发者轻松地将应用程序部署到云端。

    1 年前
  • 使用 Fastify 和 Socket.io 构建实时聊天

    前言 实时聊天是现代化的应用程序设计中不可或缺的特性。然而,要实现实时聊天的功能是挑战性的,因为它需要不仅仅是一个可靠的通讯协议,还需要一个高效的框架来处理网络请求和事件。

    1 年前
  • Deno 中使用 GraphQL 构建 API 的实例解析

    GraphQL 是一种查询语言,用于 API 的设计和查询。在 Web 开发中,GraphQL 已经成为了一个受欢迎的 API 解决方案。而 Deno 则是一个新兴的 JavaScript 运行时,通...

    1 年前
  • 在 SPA 应用中使用 Axios 实现数据请求和响应拦截

    随着前端技术的飞速发展,单页面应用(SPA)已经成为了一种主流形式。SPAs 具有许多优点,例如快速响应时,保持页面状态,减少服务器压力等。为了与服务器交互数据,我们需要使用一些库和框架来进行网络请求...

    1 年前
  • 为什么需要使用 CSS Reset?

    作为前端开发者,你一定遇到过浏览器样式兼容的问题。虽然每个浏览器都有自己的默认样式,但它们的差异可能会导致网页展示效果不同。为了解决这个问题,我们需要使用 CSS Reset。

    1 年前
  • Cypress 如何进行访问控制的测试?

    在前端开发过程中,我们经常需要进行访问控制的测试,以确保用户只能访问自己被授权的资源。Cypress 是一个流行的前端测试框架,支持编写自动化测试用例,可以帮助我们快速构建测试套件,自动化执行测试用例...

    1 年前
  • 基于 Web Components 的应用程序的扩展功能

    在前端开发过程中,经常需要通过不同的组件和插件来扩展应用程序的功能,但是这些组件和插件往往是针对特定的框架或库而设计的,限制了它们的复用和搭配性。为了解决这个问题,Web Components 作为一...

    1 年前
  • 如何在 Custom Elements 中使用 Web Components 标准?

    如何在 Custom Elements 中使用 Web Components 标准? 在现代的 Web 开发中,Web 组件已经成为了一个很重要的概念。它们通过 Web Components 标准为我...

    1 年前
  • Chai 中 expect 的使用教程

    前言 在前端开发中,写测试用例是非常重要的。通过测试用例,我们可以验证代码的正确性、稳定性和可用性,从而提升代码质量和开发效率。 在测试用例中,断言(Assertion)是核心。

    1 年前
  • ES9 之 Object.getOwnPropertyDescriptors() 使用指南

    在 ES9 中,引入了一个新的方法 Object.getOwnPropertyDescriptors(),用来获取对象属性的完整描述符。本文将详细介绍该方法的使用以及其在前端开发中的应用。

    1 年前
  • RxJS 中的 groupBy 和 partition 操作符

    本文将介绍 RxJS 中的 groupBy 和 partition 操作符,并详细说明它们的用法和意义,帮助前端开发者更好地理解和应用 RxJS。 RxJS 简介 RxJS 是一个基于可观察序列的函数...

    1 年前
  • 在 Bootstrap 和 Tailwind 之间做出正确的选择

    众所周知,Bootstrap 和 Tailwind 都是前端类的 UI 框架,具有巨大的用户群体和广泛的应用范围。但是,对于初学者来说,选择适合自己的框架时往往会犯一些错误。

    1 年前
  • 如何使用 CSS Grid 实现圣杯布局?

    CSS Grid 是最新的一种布局方式,它为前端开发者提供了更加灵活和强大的布局能力。圣杯布局也是前端开发中难度较高的一种布局方式,但是使用 CSS Grid 可以更加方便地实现这种布局。

    1 年前
  • SASS 的函数库:Bourbon 的使用方法和注意事项

    在前端开发中,CSS 是我们经常需要编写的一种语言。而 SASS 是一个非常流行的 CSS 预处理器,它可以大大简化我们的样式表代码,提高我们的开发效率。 Bourbon 是 SASS 的一个函数库,...

    1 年前
  • Sequelize 数据迁移的步骤详解

    Sequelize 是一个 Node.js 的 ORM(Object-Relational Mapping)框架,可以方便地操作数据库。数据迁移是一个重要的技术,它可以方便地将现有的数据库结构转移到新...

    1 年前
  • Redux 中的性能优化技巧

    Redux 是一种流行的状态管理库,广泛应用于 React 应用程序中。它是一种可靠、可扩展的架构模式,能够简化应用程序的状态管理。虽然 Redux 提供了许多有用的功能,但是随着应用程序规模的扩大,...

    1 年前

相关推荐

    暂无文章