随着前端开发的不断发展,异步编程已成为主流。Promise 作为一种常用的异步编程解决方案也被广泛应用,ES9 新增了 Promise.prototype.finally
方法,为我们提供了一个统一的解决方案:即在 Promise 执行完毕时无论是 resolve 还是 reject 都能够执行特定的操作,比如清理资源。
Promise.prototype.finally 的基本用法
Promise.prototype.finally 方法接收一个回调函数作为参数,当 Promise 进入 finally 阶段时,无论 Promise 的状态是 resovle 还是 reject,都会执行该回调函数。
示例代码:
-- -------------------- ---- ------- -------- ----------- - ------ --- ----------------- ------- -- - ----- --------------- - ------ -- ----------------- - ---------- -------------- --------- - ---- - ------------- ------- --------------- - --- - ----------- ---------- -- ------------------ ------------ -- --------------------- ----------- -- -------------------- --------- --------
输出结果:
Data fetched successfully Cleanup resources here
Promise.prototype.finally 的示例应用
我们在实际开发中会遇到这样一个场景:我们需要访问服务器获取数据,而在获取数据之前需要获取一个 token,获取 token 过程中可能会出现网络错误,我们需要在 finally 阶段统一清理资源。
示例代码:
-- -------------------- ---- ------- -------- ------------ - ------ --- ----------------- ------- -- - ----- --------------- - ------ -- ----------------- - ---------- -------------- --------- - ---- - ----------------- - --- - -------- ------------------------- - ------ --- ----------------- ------- -- - ----- --------------- - ------ -- ----------------- - ---------- -------------- --------- - ---- - ------------- ------- ---- ----- ----------- - --- - ------------ ----------- -- -------------------------- ---------- -- ------------------ ------------ -- --------------------- ----------- -- -------------------- --------- --------
输出结果:
Data fetched with token Token Cleanup resources here
Promise.prototype.finally 的作用
- 统一清理资源
在开发中我们经常需要做资源的清理工作,比如关闭 socket 连接、释放内存等等。使用 Promise.prototype.finally 可以在 Promise 执行完成后统一清理资源,避免出现资源泄露的情况。
示例代码:
-- -------------------- ---- ------- -------- --------- - ------ --- ----------------- ------- -- - ----- --------------- - ------ -- ----------------- - ---------- -------------- --------- - ---- - --------------- ------------ - --- - -------- ----------- - ------ --- ----------------- ------- -- - ----- --------------- - ------ -- ----------------- - ---------- -------------- --------- - ---- - ------------- ------- --------------- - --- - --------- -------- -- ------------ ---------- -- ------------------ ------------ -- --------------------- ----------- -- - ----------------------- ------ ------- -------------------- ------ ------- ---
输出结果:
Data fetched successfully Disconnect socket here Release memory here
- 统一错误处理
在 Promise 执行完成后,使用 Promise.prototype.finally 可以统一处理 Promise 执行中出现的错误情况,避免出现漏掉部分异常情况的情况,从而保证代码的稳定性。
示例代码:
-- -------------------- ---- ------- -------- ----------- - ------ --- ----------------- ------- -- - ----- --------------- - ----- -- ----------------- - ---------- -------------- --------- - ---- - ------------- ------- --------------- - --- - ----------- ---------- -- ------------------ ------------ -- --------------------- ----------- -- - ---------------- ----- ------- ----------------- ----- ------ ------- ---
输出结果:
Network error Log error here Send error report here
总结
使用 ES9 的 Promise.prototype.finally
语法糖,我们可以在 Promise 执行完毕之后进行资源的清理和错误的统一处理。在实际开发中,使用 Promise.prototype.finally
可以避免资源的泄露和错误的遗漏,从而保证代码的稳定性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647c131a968c7c53b07442e3