ES9 语法新特性:Promise.prototype.finally()

在 JavaScript 的异步编程中,Promise 是非常常用的一种技术,它使我们能够避免回调嵌套地狱,使异步代码更易于理解和管理。在 ES9 中,Promise 对象得到了一个新的实例方法:finally()

finally() 方法

finally() 方法接收一个回调函数作为参数,无论 Promise 对象的状态最终是成功或失败,该回调函数都将被执行。如果 Promise 对象最终被解决(即进入 fulfilled 或 rejected 状态),finally() 方法都将返回原始的 Promise 对象,而不会修改其状态或值。

这个方法主要用于在 Promise 对象的最终状态确定后,需要执行一些清理操作的情况。例如,关闭文件或数据库连接,释放资源,清除定时器等。在此之前,从 Promise 对象的解决路径和拒绝路径中选择一个执行回调函数。在确定 Promise 对象的最终状态之前不知道哪一个路径加最终表现。

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

在上面的例子中,使用 fetch() 方法获取数据,并在成功返回时通过 JSON.parse() 方法解析数据。如果请求失败,则写入控制台错误。在 Promise 被成功解决或拒绝后,finally() 方法都将在 Promise 对象执行结束前打印一条日志,用于清理任何未关闭的资源。无论 Promise 对象是成功还是失败,这条日志都会被打印出来。

指导意义

finally() 方法直接从 Promise 的拒绝路径或解决路径中返回 Promise 对象,因此可以使 Promise 代码更清晰、更易于阅读和理解。有了它,我们不必在 then() 方法中写入相同的代码,就可以在 Promise 的最终状态确认之前,维护和释放一些资源。

此外,在使用 try … catch 语句时,finally() 方法也可以用于在代码块中清理资源,与 try … catch 语句的结构很相似,可以更方便地管理资源。

结论

finally() 方法是一个简单但非常有用的新增特性,能够在异步编程中使代码更加健壮,更易于管理和维护。它可以用于清理资源,通过 try … catch 语句来进行类似的操作,可以解决一些常见的异步编程问题。

示例代码

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

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

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671629f4ad1e889fe21b26f8