ES9 中的 Promise.prototype.finally 详解,以及理解日常使用场景

在 ES9(ECMAScript 2018)中,Promise 新增加了一个实例方法 Promise.prototype.finally,它允许你在一个 Promise 链中添加一个在 Promise 被 resolve 或 reject 后都会执行的回调函数。

语法

Promise.prototype.finally 方法的语法如下:

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

其中,promise 是要添加 finally 方法的 Promise 对象,onFinally 是一个回调函数,它会在 Promise 被 resolve 或 reject 后都会执行。回调函数 onFinally 接受一个参数,即前一个 Promise 的 resolve 或 reject 值。

日常使用场景

JavaScript 的 Promise 对象常常用于处理异步操作,例如从服务器请求数据、读写文件等。在 Promise 的链式调用中,通常需要进行一些收尾工作,无论 Promise 成功还是失败,这些工作都需要被执行。

Promise.prototype.finally 方法就是用来解决这个问题的。下面是一个案例:

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

假设我们想从服务器请求数据并且在请求成功或失败后都需要关闭 loading 界面,我们可以将关闭 loading 界面的代码写在 finally 方法中。

实际示例

接下来,我们来看看一个实际的案例。

假设我们需要从服务器请求一份 JSON 数据,然后通过 DOM API 将数据渲染到页面上。同时,我们需要在请求成功或失败后都需要关闭 loading 界面。下面是代码:

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

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

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

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

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

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

我们首先定义了两个方法 showLoadinghideLoading,它们用于显示和隐藏 loading 界面。然后定义了一个方法 renderData,该方法用于渲染数据。最后,我们定义了一个方法 handleError,该方法用于处理请求失败的情况。

在代码中,我们使用 showLoading 方法显示 loading 界面,然后发起请求。如果请求成功,我们将数据传递给 renderData 方法进行渲染。如果请求失败,则调用 handleError 方法进行处理。无论请求成功或失败,我们都需要调用 hideLoading 方法隐藏 loading 界面。这些代码都被包含在 finally 方法中。

总结

ES9 中的 Promise.prototype.finally 方法允许在一个 Promise 链中添加一个在 Promise 被 resolve 或 reject 后都会执行的回调函数。这个方法通常用于处理一些收尾工作,例如关闭 loading 界面等。在实践中,我们可以将经常重复使用的代码写在 finally 回调函数中,以提高代码的可读性和可维护性。

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


猜你喜欢

  • Mongoose 实现 MongoDB 数据库的读写分离

    在实际应用中,MongoDB 数据库的性能和可靠性是很重要的。而为了提高 MongoDB 数据库的读取性能,可以采用数据库的读写分离技术。在 Node.js 中使用 Mongoose 操作 Mongo...

    1 年前
  • 使用 Enzyme 测试 React Native 组件时遇到的 “button.props.onPress is not a function” 的错误解决方式

    在使用 React Native 开发应用程序时,测试是必不可少的一环。而 Enzyme 是一个流行的工具,用于测试 React 组件。然而,在测试过程中可能会出现“button.props.onPr...

    1 年前
  • ES6 中的模板字符串及其使用技巧

    在 ES6 中,模板字符串是一个强大的新特性,它允许我们在字符串中插入变量、表达式以及多行文字。与传统的字符串连接方法相比,模板字符串提供了更加优雅和易读的方式来处理字符串拼接。

    1 年前
  • 如何使用 ECMAScript 2017 的 async/await 优化 JavaScript 中的异步代码处理

    在日常前端开发中,我们经常会遇到需要处理异步操作的情况。在过去,我们可能会使用回调、Promise 等方式来解决异步问题,这些方法虽然可以达到目的但却往往存在代码复杂度高、可读性差等问题。

    1 年前
  • Deno 中使用 async 和 await 的最佳实践及常见问题解答

    Deno 是一个现代的 JavaScript 运行时,它使用 V8 引擎,并提供了更加安全、稳定和可靠的开发环境。在 Deno 中,我们可以使用 async 和 await 来处理异步任务,这是一种非...

    1 年前
  • 在 Jest 测试框架中如何 mock 掉 redux-thunk 中 dispatch 的参数

    在开发前端项目时,Jest 是一个常用的测试框架,而 redux-thunk 则是 Redux 应用中常用的中间件,用于处理异步操作。在使用 Jest 进行单元测试时,我们经常需要模拟函数的返回值或处...

    1 年前
  • Docker 容器中设置静态 IP 地址的方法

    在使用 Docker 部署应用时,我们通常需要为容器分配一个唯一的 IP 地址以便于网络通信。默认情况下,Docker 会自动为容器分配一个动态 IP 地址,但有时我们需要为容器指定一个静态 IP 地...

    1 年前
  • Sequelize ORM 实践技巧:如何优化 Sequelize 的连接池配置?

    在使用 Sequelize ORM 进行开发时,我们经常需要与数据库进行交互,而对于连接池的优化配置,可以大大提高应用性能与稳定性。 什么是连接池? 连接池是指在应用启动时创建的一组连接,应用程序可以...

    1 年前
  • 常见问题:使用 LESS 中字体图标的方法

    常见问题:使用 LESS 中字体图标的方法 前言 随着 Web 前端技术的发展,越来越多的网站开始使用字体图标来代替传统的小图片,这不仅加快了网站的加载速度,还使得开发人员能够更加灵活地进行布局和排版...

    1 年前
  • ECMAScript 2020: String.prototype.trimStart 和 String.prototype.trimEnd 方法简介

    在 ECMAScript 2020 中引入的两个新方法 String.prototype.trimStart 和 String.prototype.trimEnd,分别用于消除字符串开头和结尾的空字符...

    1 年前
  • RxJS 中组合多个数据流的方法及应用

    RxJS 是一个开源的响应式编程库,它提供了一种便捷的方式来处理异步数据流和事件。其中非常重要的一个功能就是组合多个数据流。本文将介绍 RxJS 中组合多个数据流的方法及其应用,并提供实际的示例。

    1 年前
  • 更新 Redux 至 v4.x 后,它的改变有哪些?

    Redux 是一个非常流行的状态管理库,它的稳定性和可靠性一直备受开发者的认可和青睐。最近,Redux 发布了一个新的版本——v4.x,这个版本相比于之前的版本更加稳定且有了很多的重大改动。

    1 年前
  • 在 Tailwind 项目中常用的 Box Shadow 设计代码

    如果你是一名前端开发者,你可能已经听说过 Tailwind CSS 这个 CSS 框架。Tailwind CSS 是一个基于类的 CSS 工具包,它允许你快速构建响应式和可定制的 Web 应用程序。

    1 年前
  • Mocha 测试套件中的 "slow" 和 "timeout" 选项有何作用?

    在前端 Web 开发中,测试是确保我们代码质量的重要手段。而 Mocha 就是一款广泛使用的 JavaScript 测试框架,它提供了许多选项来优化测试执行过程,其中包括 “slow” 和 “time...

    1 年前
  • MongoDB 中的数据聚合查询技术分享

    MongoDB 是一种流行的 NoSQL 数据库,它支持多种数据模型,并且可以非常高效地处理大量数据。MongoDB 的聚合查询(Aggregation)功能是一个强大的工具,它可以通过将多个文档合并...

    1 年前
  • 理解 ECMAScript 2019 中的尾逗号并在 JavaScript 代码中使用它

    在 ECMAScript 2019 规范中,引入了对尾逗号的支持。尾逗号指的是在一个对象、数组或函数参数列表的最后一项后面添加一个逗号。虽然这看起来像是个小细节,但它可以带来许多好处,并且在开发流程中...

    1 年前
  • Hapi 框架结合 Pino 日志库优化 Node 应用的记录和输出

    Node.js 是一种高效的 Web 应用开发技术,但为了确保应用在运行过程中能够稳定、可靠并且优化性能,需要配置适当的日志系统。在 Node.js 上常见的日志库中,Pino 是一个相当流行的选择,...

    1 年前
  • Koa.js 使用 Log4js 记录日志的最佳实践

    简介 Koa.js 是一款轻量级的 Node.js Web 框架。而 Log4js 是一个功能强大的 JavaScript 日志工具。在实际开发中,使用 Log4js 进行日志记录是非常常见的做法。

    1 年前
  • 如何在 Jest 测试框架中 Mock Window.location.href

    在前端开发中,我们经常需要使用单元测试来确保代码质量和稳定性。Jest 是一个非常流行的 JavaScript 测试框架,它可以帮助我们编写简洁高效的测试用例。 然而,有时候我们会遇到一些特殊情况,例...

    1 年前
  • Serverless 部署踩坑记

    什么是 Serverless? Serverless 是一种云计算架构,它让开发者可以在完全无需考虑服务器管理的情况下编写和部署应用程序。相比于传统的服务器架构,Serverless 可以大大降低维护...

    1 年前

相关推荐

    暂无文章