深入理解新型 Promise.prototype.finally() 方法

阅读时长 3 分钟读完

在 JavaScript 异步编程中,Promise 是一种非常有用的构造函数。它可以很方便地管理异步操作,并且可以将多个异步操作串联起来执行。而在 ES2018 中,Promise 新增了 finally() 方法,它可以在 Promise 状态改变时,无论是 resolve 还是 reject,都会执行某一段代码,这为我们的开发提供了更好的代码控制。

1. finally() 方法的使用

finally() 方法是在 Promise 状态改变时执行的代码段,无论是成功还是失败都会执行。因此,它通常被用来执行一些清理工作,比如说关闭文件、取消网络请求、释放内存等操作。

finally() 方法的语法如下:

其中 onFinally 是一个回调函数,返回值是一个 Promise 对象,因此可以继续链式调用。

下面我们来看一个简单的示例,要求在一个网络请求完成后,不论成功还是失败,都要在浏览器控制台输出一条日志信息:

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

2. finally() 方法的特性

接下来我们来深入理解 finally() 方法的特性。它们有以下几点:

2.1 finally() 方法不接收任何参数

then()catch() 方法不同,finally() 方法不接收任何参数,因为它只是用来执行代码块,不需要处理 Promise 对象的返回值。

2.2 finally() 方法可以省略不写

相比于 catch() 方法,finally() 方法是可选的,可以不写。如果在一个 Promise 调用链中省略不写 finally(),那么它的作用就和 then() 方法一样。

2.3 finally() 方法不会改变 Promise 对象的状态

finally() 方法不会影响 Promise 对象的状态,它只是用来执行代码块,不会对 Promise 对象的结果造成任何影响。如果 finally() 方法中抛出了一个异常,那么这个异常会被 Promise 对象的后续链式调用捕获。

2.4 finally() 方法可以继续链式调用

由于 finally() 方法返回的是一个 Promise 对象,因此可以继续使用链式调用语法。这种语法可以让我们更加清晰地表达代码逻辑,同时也使得代码更加简洁易读。

下面是一个示例代码,展示了 finally() 方法的链式调用:

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

3. 总结

finally() 方法是 JavaScript 异步编程中一个非常有价值的新特性。它可以让开发者更加清晰地表达代码逻辑,同时也提高了代码的简洁度和可读性。我们需要理解 finally() 方法的特性和使用方法,这样才能更好地应用它来进行代码的开发。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645753c5968c7c53b0a1357c

纠错
反馈