介绍
Promise 是 JavaScript 异步编程的重要工具,它解决了回调地狱(Callback Hell)的问题。除了基本的 then
和 catch
方法,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