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

阅读时长 3 分钟读完

在 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

纠错
反馈

纠错反馈