Promise.prototype.finally() 的实际应用

阅读时长 5 分钟读完

Promise.prototype.finally() 是 ES2018 引入的一个新方法,它可以让我们在 Promise 完成或拒绝后执行一些代码,这段代码不管 Promise 是否成功都会被执行。在这篇文章中,我们将会深入学习如何在前端开发中应用 Promise.prototype.finally(),以及它对于项目的指导意义。

Promise.prototype.finally() 的基本用法

Promise.prototype.finally() 接受一个回调函数作为参数,并且这个回调函数不接受任何参数。它会在 Promise 执行结束后被调用,无论 Promise 是否被解决。 Promise.prototype.finally() 返回一个新的 Promise,它将会继承我们传进去的 Promise 的状态(fulfilled 或者 rejected)。

下面是一个基本应用的例子:

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

-------
  ------------ -- -
    --------------------
  --
  ------------ -- -
    ---------------------
  --
  ----------- -- -
    -------------------- ---------
  ---
展开代码

输出结果为:

我们可以看到, Promise.prototype.finally() 的回调函数会被执行,无论 Promise 成功还是失败。

实际应用场景

处理异步请求

异步请求是我们日常前端开发中经常遇到的问题。因为它们是异步的,所以我们必须在处理它们时非常小心,以确保我们的代码不会崩溃或出现无法处理的错误。使用 Promise.prototype.finally() 可以简化异步请求的处理过程,因为它可以让我们在请求完成后执行一些其他的代码。

下面是一个简单的例子,使用了 fetch() 函数向服务器发送一个 GET 请求:

-- -------------------- ---- -------
---------------------------------
  -------------- -- -
    ------ ----------------
  --
  ---------- -- -
    -- ----------
  --
  ------------ -- -
    -- ----
  --
  ----------- -- -
    -- -- ------- --
  ---
展开代码

在这个例子中,我们可以看到 Promise.prototype.finally() 被用于在请求完成后隐藏 loading 动画。这是非常有用的,因为在服务器响应数据时,我们通常需要隐藏这些动画。

处理非异步操作

在现代 JavaScript 应用程序中,我们通常使用异步操作处理大量数据。但是,在某些情况下,我们不需要异步操作,我们可以使用 Promise.prototype.finally() 来处理它们。

例如,我们想要对一个数组进行排序,但是我们不需要等待异步请求完成后才进行操作,这时我们可以使用 Promise.prototype.finally() 来执行排序操作:

处理资源清理

在某些情况下,我们可能需要确保当 Promise 执行完毕后,我们的资源已被正确释放。 Promise.prototype.finally() 可以在 Promise 执行结束后清理这些资源。

例如,我们可以使用它来关闭数据库连接:

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

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

-------
  ------------ -- -
    -- ----
  --
  ------------ -- -
    -- ----
  --
  ----------- -- -
    -----------
  ---
展开代码

在这个例子中,当 Promise 执行结束后,数据库连接会被关闭,确保我们的应用程序不会在不必要的情况下浪费资源。

指导意义

使用 Promise.prototype.finally() 可以使我们的代码更简洁、更易于阅读,而且可以减少代码中的重复。 如果您的团队正在使用 Promise,我们建议您尝试使用 Promise.prototype.finally() 以优化您的代码中的 Promise 处理。

此外,使用 Promise.prototype.finally() 也可以帮助您更好地管理您的资源。 它可以确保您所有的资源都在 Promise 执行结束后被正确释放,这可以防止您的代码出现内存泄漏。

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

纠错
反馈

纠错反馈