ECMAScript 2018 中关于 Promise.prototype.finally() 的一些重要事项

介绍

Promise.prototype.finally() 是 ECMAScript 2018 中新增的方法,它可以在 Promise 的状态发生变化之后,无论是 resolve 还是 reject,都会执行相应的代码。Promise.prototype.finally() 可以用于处理一些资源释放、清理的场合,以及代码的统一处理等等。

使用方式

Promise.prototype.finally() 方法接收一个函数作为参数,当 Promise 实例状态改变时,该函数会被调用。无论 Promise 实例是 resolve 还是 reject,都会执行相应的代码。

例如:

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

上述代码输出:

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

注意事项

1. finally() 方法返回一个新的 Promise 对象

注意到 finally() 方法返回的是一个新的 Promise 实例,一旦 finally() 方法被调用,它会在原有的 Promise 对象之后再返回一个新的 Promise 对象,并且这个新的 Promise 对象的状态是原有的 Promise 对象的状态。

例如:

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

上述代码输出:

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

2. finally() 方法不能改变 Promise 的状态

finally() 方法只是 Promise 状态发生改变后,做一些资源释放、清理的工作,但并不能改变 Promise 对象本身的状态。

例如:

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

上述代码输出:

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

可以看到,Promise 状态没有从 resolve 改变成 reject,而是执行了 finally() 方法中的代码之后,返回了一个新的 Promise 对象,使得 Promise 状态变成了 reject。

3. finally() 方法可以省略参数

finally() 方法可以省略参数,这种情况下,它只是简单地将 Promise 对象的状态传递给下一个 Promise 实例。

例如:

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

上述代码输出:

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

总结

ECMAScript 2018 的 Promise.prototype.finally() 方法可以在 Promise 对象状态改变之后做一些资源释放、清理的工作,并且返回一个新的 Promise 对象。但 finally() 方法本身不会改变 Promise 对象的状态,同时 finally() 方法也可以省略参数。如果我们在 Promise 对象的处理流程中需要做一些资源释放、清理等工作,可以使用 Promise.prototype.finally() 方法,使代码更加简洁和易于阅读。

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


猜你喜欢

  • ES6 中的模板标签 (Tagged Template) 详解

    在 ES6 中引入了模板标签 (Tagged Template) 这个新的语法特性,它允许我们在模板文字 (template literals) 前加上一个标识符,从而触发一个函数,将模板文字和表达式...

    1 年前
  • GraphQL 中的调试技巧

    GraphQL 是一种用于 API 构建的查询语言。它使得客户端能够精确地指定其数据需求,从而减少了网络传输和处理时间。在前端开发中,GraphQL 早已成为很多公司和团队的首选技术栈之一。

    1 年前
  • React 中统一管理接口地址的方案分享

    前端开发中,调用接口是非常常见的操作。在 React 项目中,我们通常需要把接口地址存放在一个统一的地方,便于维护和管理。本文将介绍一种方便的方式来管理接口地址,并对该方案进行详细的讲解和说明。

    1 年前
  • 使用 Vue.js 和 WebRTC 构建音视频通信应用

    前言 音视频通信已经成为当今互联网应用的重要组成部分。WebRTC 是一种 Web 实时通信技术,它允许浏览器和移动平台应用程序实现实时通信和音视频会议。本文将讲解使用 Vue.js 和 WebRTC...

    1 年前
  • Cypress 测试:如何处理无 UI 场景下的 API 测试

    业务场景中,API 测试不可或缺。一些不允许直接运行或者需要特殊环境配置的依赖,例如它们只能在某个特定时间运行或者需要进行特定的资源部署等。为了避免代码和测试之间的耦合,很多测试人员喜欢用代码分离测试...

    1 年前
  • Gatsby.js 和 Sanity 的 Headless CMS 联动:更好的开发体验与数据管理

    前言 在现代 Web 开发中,前端框架和 Headless CMS 的结合已经成为了一种趋势。这种结合可以提升开发效率、降低维护成本、提高网站的性能和体验等。 Gatsby.js 是一款基于 Reac...

    1 年前
  • SASS 中的媒体查询注意事项与优化方案

    SASS 中的媒体查询注意事项与优化方案 前端开发中,响应式布局相当重要。而响应式布局中,媒体查询是不可或缺的一部分。媒体查询可以使元素在不同的设备上展现不同的样式。

    1 年前
  • SSE 实现时的容错处理方法详解

    随着 Web 应用的不断发展,实时通信变得越来越重要。SSE(Server Sent Events)是一种实现实时通信的技术,它允许服务器向客户端推送数据,同时也提供了一些容错机制以确保通信的可靠性。

    1 年前
  • 在 ES7 中使用 Symbol.iterator 实现自定义迭代器

    在 ES7 中使用 Symbol.iterator 实现自定义迭代器 迭代器是 JavaScript 中非常有用的一个概念,它可以让我们以一种可控和可迭代的方式遍历一个数据集合。

    1 年前
  • Linux 高性能网络编程技巧

    Linux 作为一款强大的操作系统,其网络编程在性能方面表现非常优秀。在前端开发中,我们经常需要进行网络通信,因此了解 Linux 高性能网络编程技巧对于前端开发人员也是很有指导意义的。

    1 年前
  • Babel 中如何使用 Class Properties 和 Class Fields

    在现代 JavaScript 中,类 (Class) 是一种非常常见的编程方式。但是,JavaScript 中的 Class 功能相对于其他编程语言来说还比较青涩,缺乏一些基本的语法特性,例如:cla...

    1 年前
  • RESTful API 中的数据过滤详解

    随着 RESTful API 的广泛应用,越来越多的 Web 应用程序需要检索数据并根据用户的需要返回特定的数据。在大型系统中,数据过滤变得尤为重要,因为过滤数据可以减少返回的数据量并提高系统的响应速...

    1 年前
  • 从拍平数组到递归对象:解析 ES11 新增的 array.flat、arr.filter 和 Object.fromEntries

    在前端开发中,经常会遇到对数组和对象的操作,特别是在对数据进行处理和展示时,对数据的操作是不可或缺的。ES11 新增了一些数组和对象的新方法,本文将详细介绍其中的 array.flat、arr.fil...

    1 年前
  • 在 Node.js 项目中如何集成 ESLint

    在 Node.js 项目中如何集成 ESLint 随着 JavaScript 代码量的不断增长和团队协作的加强,代码风格的一致性逐渐变得非常重要。ESLint 是一个功能强大的 JavaScript ...

    1 年前
  • 无障碍设备开发与智能家居应用的结合

    随着科技的不断发展,智能家居应用越来越普及,它能给人们带来很多便利,例如:自动化控制、节能减排等等。但是有一个问题必须要面对:智能家居应用是否也能让使用一些特殊设备、例如视力、听力等障碍的人士得...

    1 年前
  • Chai 如何断言两个浮点数是否接近

    Chai 如何断言两个浮点数是否接近 在前端编程中,我们经常需要比较浮点数的值。然而,由于浮点数的精度问题,可能会导致两个看似相等的浮点数在比较时出现误差。为了应对这个问题,Chai 提供了一个接近断...

    1 年前
  • ECMAScript 2019 (ES10): 利用 closure 可尝试模拟私有属性实现

    在 JavaScript 中,我们经常需要在对象中定义私有属性。而如果使用传统的方法,我们通常需要使用下划线前缀命名属性来表示它们是私有的。但在 ECMAScript 2019 (ES10) 中,我们...

    1 年前
  • Express.js 中使用 body-parser 中间件解析 POST 请求参数

    介绍 在 Node.js 和 Express.js 中,处理 HTTP 请求是非常常见的任务。虽然 GET 请求可以将参数放在 URL 中,但 POST 请求通常需要将参数放在请求正文中。

    1 年前
  • 盘点 Web Components 的优点和缺点

    随着前端技术的不断进步和发展,我们也不断的迎来新的开发理念和技术概念。Web Components 是一个很好的例子,它可以被看作是一种新型的前端开发技术。这里我们将详细讨论 Web Componen...

    1 年前
  • 基于 JWT 的认证和授权在 Next.js 中的应用实践

    基于 JWT 的认证和授权在 Next.js 中的应用实践 前言 基于 JWT 的认证和授权在现在的前后端开发中已成为一种常见的方式。Next.js 是一个非常流行的 React 框架,它提供了服务器...

    1 年前

相关推荐

    暂无文章