ES9 中的 Promise.prototype.finally() 详解

在 ES9 中,Promise 对象新增了一个非常实用的方法:Promise.prototype.finally()。它可以在 promise 结束时,无论是 resolve 还是 reject,都会执行一段指定的代码,非常适用于需要在 promise 结束后进行一些清理工作的场景。本文将详细介绍 Promise.prototype.finally() 的特殊之处,以及如何使用它。

特殊之处

1. 返回原 promise 对象

与其他 promise 方法不同,Promise.prototype.finally() 不会改变原 promise 对象的状态,而是返回一个新的 promise 对象。这意味着,无论是 resolve 还是 reject,都不会影响原 promise 对象的状态。这一点与 Promise.prototype.then()Promise.prototype.catch() 不同,它们会返回一个新的 promise 对象,并根据回调函数的返回值改变状态。

2. 不接收参数

Promise.prototype.finally() 不接收任何参数,它只是在 promise 结束时执行指定的代码。这意味着,无法在 finally 方法中访问原 promise 对象的值或状态。如果需要在 finally 方法中访问 promise 对象的值或状态,可以使用闭包或者在 promise 内部定义变量。

3. 无法阻止 reject

Promise.prototype.catch() 不同,Promise.prototype.finally() 无法阻止 promise 的 reject。即使在 finally 方法中抛出错误,promise 仍然会 reject。这意味着,如果需要阻止 reject,应该使用 Promise.prototype.catch()

使用方法

使用 Promise.prototype.finally() 非常简单,只需要在 promise 对象后面调用该方法,并传入一个回调函数即可。该回调函数会在 promise 结束时执行,无论是 resolve 还是 reject。

下面是一个示例代码:

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

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

在上面的示例代码中,我们定义了一个 fetchData 函数,它使用 fetch 方法获取一个 JSON 数据,并将其解析为 JavaScript 对象。在 then 方法之后,我们调用了 finally 方法,并传入一个回调函数,该回调函数会在 promise 结束时打印一条日志。

无论 fetch 方法是否成功,finally 方法都会执行,并打印一条日志。这非常适用于需要在 promise 结束后进行一些清理工作的场景,比如关闭数据库连接、释放资源等。

总结

Promise.prototype.finally() 是一个非常实用的方法,它可以在 promise 结束时执行指定的代码。它与其他 promise 方法不同,不会改变原 promise 对象的状态,并且无法阻止 reject。使用 Promise.prototype.finally() 非常简单,只需要在 promise 对象后面调用该方法,并传入一个回调函数即可。如果需要在 promise 结束后进行一些清理工作,可以考虑使用 Promise.prototype.finally()

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


猜你喜欢

  • Hapi 框架中使用 Good 插件监控 HTTP 请求和响应

    前言 在前端开发中,我们经常需要对 HTTP 请求和响应进行监控和分析。Hapi 是一个 Node.js 的 Web 框架,它提供了丰富的插件和工具,可以方便地实现 HTTP 请求和响应的监控和分析。

    6 个月前
  • 在 Mocha 中使用 Supertest 测试 Rest API

    在前端开发中,测试是一个非常重要的环节。Mocha 是一个流行的 JavaScript 测试框架,而 Supertest 则是一个方便的工具,可以用来测试 Rest API。

    6 个月前
  • 在 Kubernetes 中使用 Deployment 资源

    Kubernetes 是一款开源的容器编排平台,它可以帮助开发者更好地管理和部署容器化应用程序。其中一个重要的组件就是 Deployment 资源,它可以帮助我们轻松地管理容器应用程序的部署和更新。

    6 个月前
  • SSE 在 Nginx 中的应用和优化

    SSE 在 Nginx 中的应用和优化 SSE(Server-Sent Events)是一种基于 HTTP 的服务器推送技术,它允许服务器向客户端发送事件流,而无需客户端发起请求。

    6 个月前
  • 在 Jest 中使用 Jest.spyOn 跟踪 React Redux 动作

    在前端开发中,React 和 Redux 都是非常流行的技术。在进行单元测试时,我们需要对这些技术进行测试,以保证代码的质量和稳定性。而在 Jest 中使用 Jest.spyOn 可以帮助我们跟踪 R...

    6 个月前
  • 如何在“ECMAScript 2016”中使用“Array.slice”函数进行数组截取?

    在前端开发中,经常需要对数组进行截取操作。在 ECMAScript 2016 中,我们可以使用 Array.slice() 函数来实现这一操作。本文将详细介绍如何使用 Array.slice() 函数...

    6 个月前
  • Redis 实践:使用 Redis 缓存优化列表分页查询

    前言 在 web 应用开发中,列表分页查询是非常常见的需求。然而,当数据量较大时,分页查询会对数据库造成较大的压力,影响性能。为了解决这个问题,我们可以使用 Redis 缓存来优化列表分页查询。

    6 个月前
  • Mongoose 中使用 $ne 操作符查询不匹配条件的方法

    在使用 Mongoose 进行 MongoDB 数据库操作时,有时我们需要查询不匹配某个条件的数据,这时我们可以使用 $ne 操作符。本文将详细介绍在 Mongoose 中使用 $ne 操作符查询不匹...

    6 个月前
  • Koa2 跨域问题解决

    跨域问题在前端开发中是一个非常常见的问题。在使用 Koa2 搭建服务时,如果前端页面与后端服务不在同一域名下,就会发生跨域问题。本文将介绍如何使用 Koa2 解决跨域问题。

    6 个月前
  • ES11 中的 Promise.allSettled() 详解

    在 ES11 中,Promise.allSettled() 方法被引入到了 Promise API 中。这个新方法可以让我们更好地处理 Promise 数组中的多个 Promise 实例,而不用担心其...

    6 个月前
  • Sass 中扩展 (Extend) 指令的高级应用技巧

    Sass 是一个流行的 CSS 预处理器,它允许开发者使用变量、嵌套、Mixin 等功能来更高效地编写 CSS。其中,扩展 (Extend) 指令是 Sass 中非常有用的功能之一。

    6 个月前
  • 在 Kubernetes 中使用 Job 资源

    Kubernetes 是一个流行的容器编排系统,它可以自动化容器的部署、伸缩和管理。在 Kubernetes 中,Job 资源用于执行一次性任务,例如批处理作业和数据处理作业。

    6 个月前
  • Fiber 性能优化:Go 并发请求服务端点播示例

    前言 在前端开发中,性能优化一直是一个不可忽视的问题。而 Fiber 是一个快速、简单、开放源代码的 Go Web 框架,它的出现极大地提高了 Web 应用的性能和可维护性。

    6 个月前
  • Hapi 框架中使用 Inert 插件处理静态文件请求

    在 Web 开发中,处理静态文件请求是一个很常见的需求。比如说,我们需要展示一些图片、CSS 文件或者 JavaScript 文件。在 Hapi 框架中,我们可以使用 Inert 插件来实现这个功能。

    6 个月前
  • Deno 中如何使用 ElasticSearch 实现全文搜索

    随着互联网的发展,全文搜索已经成为了许多应用程序必不可少的功能。在前端开发中,我们通常使用 ElasticSearch 来实现全文搜索。本文将介绍如何在 Deno 中使用 ElasticSearch ...

    6 个月前
  • SSE 如何在 WebSocket 断开后自动重连?

    什么是 SSE? SSE(Server-Sent Events)是一种基于 HTTP 协议的服务器推送技术,它可以让服务器实时向客户端发送数据,并且客户端可以在接收到数据后自动更新页面内容,而不需要手...

    6 个月前
  • 前端 Web 开发中 Enzyme 的测试技巧

    在前端 Web 开发中,测试是非常重要的一环。而 Enzyme 是 React 应用中最常用的测试工具之一。它提供了一套简单易用的 API,可以让开发者方便地测试 React 组件的渲染、交互、状态等...

    6 个月前
  • ECMAScript 2016 中如何使用 "try...catch...finally" 语句?

    在 ECMAScript 2016 中,我们可以使用 "try...catch...finally" 语句来处理可能会出现异常的代码。这个语句结构包括三个部分,分别是 "try"、"catch" 和 ...

    6 个月前
  • Docker 搭建 Kafka 集群详解

    在现代化的应用开发中,消息队列成为了一种重要的组件。Kafka 作为一种高吞吐量、低延迟的分布式消息系统,被广泛应用于互联网企业中。本文将介绍如何使用 Docker 搭建 Kafka 集群。

    6 个月前
  • RxJS 中的 concatMap 和 exhaustMap 操作符详解

    RxJS 是一个强大的 JavaScript 库,它提供了丰富的操作符来处理异步数据流。其中,concatMap 和 exhaustMap 是两个常用的操作符,它们可以帮助我们更好地处理异步数据流。

    6 个月前

相关推荐

    暂无文章