Promise 中的 finally() 方法作用及注意事项

介绍

Promise 是 JavaScript 异步编程的重要工具,它解决了回调地狱(Callback Hell)的问题。除了基本的 thencatch 方法,Promise 还有一个 finally 方法,本文将会探讨 finally 方法的作用、注意事项以及示例。

作用

finally 方法是 Promise 的实例方法,无论 Promise 实例最后是 fulfilled 或者 rejected 状态,finally 方法都会执行回调函数并返回一个新的 Promise 对象。

该方法可以用于无论 Promise 状态如何都需要执行的代码块,比如清理资源、关闭连接等等操作。它类似于 try-catch-finally 语句中的 finally 块。

注意事项

1. finally 方法的回调函数不接收任何参数

finally 方法的回调函数不接受任何参数,因此在其内部无法判断 Promise 的状态,也无法获取 Promise 返回的值或抛出的错误。

例如:

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

2. finally 方法返回一个新的 Promise 对象

由于 finally 方法返回一个新的 Promise 对象,所以可以在 finally 方法内部再次调用 then 或者 catch 方法。

例如:

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

3. finally 方法会改变 Promise 的值

finally 方法会将 Promise 的值传递给下一个 then 方法,如果回调函数中没有返回任何值,则 Promise 的值不会改变。

例如:

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

4. finally 方法中的异常会被捕获并传递给下一个 catch 方法

如果 finally 方法内部抛出了异常,则该异常会被捕获并传递给下一个 catch 方法。

例如:

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

示例

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

该示例使用 fetch 方法获取 JSON 数据,并在完成后打印数据或者错误信息,无论状态如何都会打印 'JSON Data Loaded.'。

结论

finally 方法是 Promise 的实例方法,可被用于对 Promise 最终状态的处理,对清理资源、关闭连接等操作有很大用处。但是需要注意,该方法不接收任何参数,返回一个新的 Promise 对象并且会改变 Promise 的值,同时 finally 方法中的异常会被捕获并传递给下一个 catch 方法。

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