ES12 中的 Promise.prototype.finally 方法方便地处理异步操作的后续处理!

阅读时长 4 分钟读完

在日常前端开发中,处理异步操作是非常常见的任务。在 ES6 中,我们引入了 Promise 这个对象,大大简化了异步操作的处理方式。而在 ES12 中,Promise.prototype.finally 方法进一步方便了我们处理异步操作的后续操作。

Promise.prototype.finally 方法是什么?

Promise.prototype.finally 方法是 Promise 对象中的一个实例方法,它接受一个回调函数作为参数,并且该回调函数不管 Promise 结果如何都会执行。

在 Promise 结束时,无论其是 fulfilled 还是 rejected,都会执行回调函数。因此,Promise.prototype.finally 方法是非常适合用于清理工作,例如,释放资源、关闭数据库连接等等。

Promise.prototype.finally 方法的使用方式

Promise.prototype.finally 方法的使用非常简单。只需要在 Promise 调用链的尾部使用 finally 方法,并传入回调函数即可。例如:

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

在这个示例中,使用 fetch 方法获取了一个 API 的响应数据,然后使用 Promise 调用链处理数据和错误。最后,使用 finally 方法传入一个回调函数,无论 Promise 调用链是 resolved 还是 rejected 都会执行该回调函数。在这个示例中,回调函数输出“请求已完成”。

Promise.prototype.finally 的指导意义

在我们的日常前端开发中,经常需要做一些异步操作,例如从服务器获取数据,发送请求等等。通常,我们需要进行一些后续处理,例如,渲染数据、更新 UI 状态等。Promise.prototype.finally 的引入,使得我们可以更加方便地进行这些后续处理,并且可以在 Promise 调用链中的任何位置添加清理工作。让我们看看以下两个示例:

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

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

如果使用示例 1 中的方式处理后续操作和错误处理,我们需要在多个地方编写重复的代码,导致代码冗长,难以维护。而使用示例 2 中的方式,我们可以将后续处理和清理工作统一在 finally 方法中完成。

结论

Promise.prototype.finally 方法是 ES12 中的一个新方法,它是一个非常实用的方法,可以帮助我们更加方便地处理异步操作的后续处理和清理工作。在处理异步操作时,可以将后续处理和清理工作集中放置在 finally 方法中,以方便代码的维护和开发。

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

纠错
反馈