Promise.finally() 是 ES6 增加的一个新特性,其作用是在 promise 执行结束时,无论是 resolve 还是 reject 都会执行 finally 函数中的代码块,并返回原 promise 结果。
Promise.finally 用法
Promise.finally() 接收一个函数作为参数,该函数将在 promise 结束时执行。它不接收任何参数,也不管 promise 是成功还是失败。
下面是一个简单的示例代码:
-- -------------------- ---- ------- -------- ------------ ------ --- --------------------------- ---------------- --- --------- - ------------------------ - --- ----------------- ---------------- -------- ---------------- ------ --------------- ------------ - -------- -- - ---------------------------- -------------------- ----------------- ----------------- ---------------- -------------------- -------- --展开代码
在这个示例代码中,myPromise() 返回一个 Promise,它会随机执行 resolve 或 reject。而 then() 和 catch() 用于处理 promise 成功或失败的结果。而 finally() 则会在 promise 结束时执行,输出"Promise ended"。
使用场景
1. 释放资源
在使用 promise 处理异步操作时,我们可能需要某些资源来执行操作,如数据库连接、文件读写等。如果操作完成或出现错误之后,我们需要释放这些资源。使用 finally() 方法可以帮助我们在 promise 结束时释放资源。
-- -------------------- ---- ------- -------- ------------ ------ --- --------------------------- --- ------- - -------------------- ---------------- --- --------- - ------------------------ - --- ----------------- ---------------- -------- ---------------- ------ --------------- ------------ - -------- -- - ---------------------------- -------------------- ----------------- ----------------- ---------------- --------------------------------- --展开代码
在这个示例代码中,连接数据库的函数 connectToDatabase() 返回一个连接句柄,它在 promise 开始时创建。而 closeDatabaseConnection() 函数则在 promise 结束时释放连接句柄。
2. 执行清理操作
在 promise 执行完成之后,我们可能还需要执行一些清理操作,例如修改 UI 状态、输出日志等。finally() 方法可以帮助我们确保在 promise 结束时执行这些清理操作。
-- -------------------- ---- ------- -------- ------------ ------ --- --------------------------- ---------------- --- --------- - ------------------------ - --- ----------------- ---------------- -------- ---------------- ------ --------------- ------------ - -------- -- - ---------------------------- -------------------- ----------------- ----------------- ---------------- ------------------ --展开代码
在这个示例代码中,hideLoadingIcon() 函数将隐藏加载图标,确保在 promise 结束时执行。
注意事项
- finally() 方法返回一个新的 Promise,该 Promise 将与原 Promise 规则相同,其 resolve 和 reject 结果与原 Promise 的 resolve 和 reject 结果相同。
- finally() 方法并不处理 Promise 的 resolve 或 reject 处理逻辑,而只处理 promise 的完成状态。因此,在 finally() 中不能使用 return 或 throw。
- finally() 方法不改变 Promise 的状态,因此无法取消 Promise 的执行。
总之,finally() 方法是一个十分方便的工具,可以帮助我们在 Promise 执行结束时执行一些必要的操作,避免代码冗余,提高代码可读性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bda559a231b2b7ed053f18