在 ECMAScript 6(ES6)中,引入了 Promise,它是一种处理异步操作的方式,可以让代码更加优雅且可读性更强。而到了 ECMAScript 2017(ES8), Promise 又新增了一个方法: Promise.prototype.finally 方法,本文将详细介绍这个方法的使用及其学习和指导意义。
Promise.prototype.finally 方法的作用
Promise.prototype.finally 方法用于指定无论 Promise 对象最终状态如何,都会执行的操作。这意味着无论 Promise 成功还是失败,都会执行 finally 函数,并且 finally 函数没有参数。
Promise.prototype.finally 方法的语法
Promise.prototype.finally 方法的语法如下:
promise.finally(() => { //finally 这里的代码将会在 Promise settled 后执行 })
其中,promise 为 Promise 对象实例。
Promise.prototype.finally 方法的示例
下面来看一下 Promise.prototype.finally 方法的示例代码:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - --------------- -- ----- -- ------- ------------- -- - ------------------ -- -------------- -- - ------------------ -- ----------- -- - ---------------------- --展开代码
以上示例代码输出如下:
done finally
首先 Promise 会在 1 秒后 resolve,输出 done。然后由于没有出现错误,catch 部分不会执行,最后输出 finally。
再看一个 Promise 失败的示例:
-- -------------------- ---- ------- ----- ------- - --- ----------------- ------- -- - ------------- -- - --------------- -- ----- -- ------- ------------- -- - ------------------ -- -------------- -- - ------------------ -- ----------- -- - ---------------------- --展开代码
以上示例代码输出如下:
error finally
这里 Promise 会在 1 秒后 reject,输出 error。然后 catch 部分会执行,最后输出 finally。
Promise.prototype.finally 方法的学习和指导意义
Promise.prototype.finally 方法的出现,为开发人员提供了一种在 Promise settled 后执行回调操作的简单方式。开发人员可以在 finally 回调中执行一些必要的清理工作,或者在客户端应用程序中执行一些必要的 UI 操作等。
同时,也可以通过 finally 的行为,来确保列表、文件资源和数据库连接都已经关闭,避免了不必要的资源浪费和可能导致的内存泄漏问题。
举个例子,假如我们有一个使用了 Promise 的函数 fetchData,需要获取某个 API 的数据,同时如果 API 请求失败,需要执行异常处理等操作:
-- -------------------- ---- ------- -------- ----------- - ------ --- ----------------- ------- -- - ------------------------------------------------ ---------------- -- - ---------------------- -- -------------- -- - -------------------- ------------- -- ----------- -- - ---------------- ------- ------------ -- -- -展开代码
在上面的代码中,我们通过 finally 方法,在 API 请求完成时执行了一些必要的清理工作,并输出了相应的请求完成信息。
总之,Promise.prototype.finally 方法在处理异步操作时,是一种非常有用的方式。它为代码的可读性和可维护性提供了很好的途径,而且还能确保始终执行必要的清理和操作。所以对开发人员来说,了解并熟练使用 Promise.prototype.finally 方法将是非常有价值的技能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c6fbfbcc0f7239cde7e077