前言
Promise 是 JavaScript 中用于异步编程的一种解决方案。它是 ES6 中引入的新对象,通过 Promise,我们可以更优雅地处理异步代码,避免回调地狱式的代码。随着 ES6 的使用越来越广泛,Promise 也变得越来越重要。
在 ES9 中,Promise.prototype.finally() 成为了一个新的特性。它为 Promise 增加了一个 finally 方法,使得我们可以在 Promise 无论成功还是失败都清理一些资源。本文中,我们将详细介绍 Promise.prototype.finally() 的使用方法和其在实际开发中的指导意义。
什么是 Promise.prototype.finally()
Promise.prototype.finally() 是一个新的实例方法,它被添加到了 Promise 原型对象中。该方法只需要一个回调函数作为参数,并在 Promise 被解决或拒绝后执行该回调函数。
该方法有以下特点:
- finally 方法不管 Promise 对象最终的状态如何,都会执行;
- finally 方法的回调函数不接受任何的参数,也就是说,无法获取到前面两个方法的返回值;
- finally 方法主要是针对于无论 resolve 或 reject 的情况,都需要在 Promise 执行结束后执行的情况。
Promise.prototype.finally() 的语法
Promise.prototype.finally() 方法的语法如下:
--------------------------
- promise:Promise 对象。
- onFinally:Promise 被解决或拒绝后执行的回调函数。
Promise.prototype.finally() 的示例代码
下面我们通过一个实例代码来展示 Promise.prototype.finally() 的使用方法:
------------------ ------------- -- - ---------------------- ----------- ----- --- -------------- -- -------------- -- - ------------------- ----------- ------ -- -- ------------- -- - ---------------------- ----------- ----- --- -------------- -- ----------- -- - ----------------------- -- ------------- -- - ---------------------- ----------- -- -------------- -- - ------------------- ----------- ---
在该代码中,我们使用 Promise.resolve() 构造一个 Promise 对象,并对其进行链式调用。在第一个 then 方法中,我们将 value 传入一个匿名函数,控制台输出 Resolved: 3,并抛出一个错误。在 catch 方法中,我们捕获了这个错误,并返回一个新的值 4。
在第二个 then 方法中,我们又将 value 传入一个匿名函数,控制台输出 Resolved: 4,并再次抛出一个错误。在 finally 方法中,我们只是简单地将 finally 输出到控制台。
在最后一个 then 方法中,我们又将 value 传入一个匿名函数,控制台输出 Resolved: undefined。在 catch 方法中,我们捕获到了第二个错误,并输出 Catch: Error: test。
Promise.prototype.finally() 的指导意义
Promise.prototype.finally() 的主要用途是,不管 Promise 中的状态是成功还是失败,都可以使用 finally 来清理一些资源或执行一些必须执行的代码。常见的场景包括:
- 手动释放资源;
- 无论成功或失败都需要执行的代码;
- 是否继续向下传递的判断。
在实际开发中,我们通常都需要确保开头或最后执行一些代码,如清理资源或日志记录等,这时候 finally 方法就非常有用了。例如:
-------- ------------ - ------ ---------- ---------------- -- - -- -- -------- -- -- -------------- -- - -- -- ----- -- -- ----------- -- - ---------------- ---- ---- --------- --- -
在这个例子中,我们使用了 finally 方法来确保控制台输出了正确的日志,无论请求是成功还是失败。
结论
Promise.prototype.finally() 提供了一种清理资源和确保代码必须执行的方法。在实际开发中,我们常常需要确保资源被释放掉,并且需要对日志进行记录。Promise.prototype.finally() 提供了一种简单的方式,可以在 Promise 被解决或拒绝后执行一些必要的代码。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6736aead0bc820c58255c1b5