什么是 Promise.finally()?
Promise.finally() 是 ES9 中新增的 Promise 方法。该方法为 Promise 实例新增了一个 finally() 方法,返回一个新的 Promise 对象。
Promise.finally() 方法接受一个函数作为参数,不论 Promise 状态是 fulfilled 还是 rejected,该函数都会被执行。finally() 方法的回调函数接受一个参数,即前一个 Promise 的结果。该方法返回一个新的 Promise 对象,可以继续链式调用 then() 或 catch()。
为什么需要 Promise.finally()?
在 Promise 异步编程中,finally() 方法用于确保无论 Promise 状态如何,都能执行一些代码。通过 finally() 方法,可以把重复代码的逻辑抽离出来,避免代码冗余。可以使用 finally() 即时释放资源,比如关闭数据库连接、请求超时等。
以前,JavaScript 开发人员通常使用 then() 和 catch() 方法链式调用 Promise。但是这种做法存在一些问题。当我们想要在 then() 操作之后进行一些清理操作时,只能在 then() 内重复代码。例如:
---------- -------------- -- - ---------------------- -- ------ -- ------------ -- - ------------------- -- ---------- -- ----------- -- - -- -------- ---
上面的代码中,在成功或失败的情况下,都需要执行一些清理操作。如果不使用 finally(),只能在 then() 或 catch() 方法内部编写清理代码,导致代码重复。
通过使用 Promise.finally() 方法,可以将清理操作单独提取出来,使代码更简洁、易于维护。例如:
---------- -------------- -- - ---------------------- -- ------ -- ------------ -- - ------------------- -- ---------- -- ----------- -- - -- -------- ---
Promise.finally() 示例代码
在以下示例中,我们使用 Promise.finally() 在数据请求完成后关闭数据库连接。
-------- --------- - ------ ------------------------------------- -------------- -- - ------ ---------------- -- ---------------------------------- -- - --------- -------- - -------- ------------------------- - -- ------- - -- -- --------- -- --------- ---------- -- - ------------------ -- ------------ -- - --------------------- ---
结论
Promise.finally() 是 Promise 异步编程中的一个非常有用的新特性。它只能在 Promise 函数链中被使用,它的主要作用是对 Promise 执行完后进行操作(无论 Promise 是否 resolved 或 rejected),该方法可以帮助你统一一些后续操作,并减少代码冗余。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66fa3ea8439b08c33f47dbb1