Promise 是实现异步编程的一种方式,通过它我们可以更容易地处理异步操作并避免回调地狱。ES8 中引入了 Promise.prototype.finally() 方法,允许我们在一个 Promise 链中注册一个回调函数,该回调函数在 Promise 完成后无论是成功还是失败都会被调用。
语法
Promise.prototype.finally() 方法接受一个回调函数作为参数,该回调函数不接受任何参数。回调函数在 Promise 链的末尾执行,所以无法获取 Promise 的状态或值。
promise.finally(() => { // callback function });
用法
在实际的应用中,Promise.prototype.finally() 方法可以用来在 Promise 完成后做一些清理工作,比如关闭数据库连接、销毁资源等。
下面是一个简单的例子,来展示如何在 Promise 完成后打印一条日志信息:
// javascriptcn.com 代码示例 function asyncFunction() { return new Promise((resolve) => { setTimeout(() => { resolve('Resolved'); }, 1000); }); } asyncFunction() .then((value) => { console.log(value); }) .catch((error) => { console.log(error); }) .finally(() => { console.log('Completed'); });
上面代码中,Promise 链执行完后,无论是成功还是失败,都会打印一条 "Completed" 的日志信息。
注意事项
Promise.prototype.finally() 返回一个新的 Promise 对象,这意味着它不会修改原始的 Promise 对象。
在旧的浏览器和特定的环境中可能没有这个方法,需要使用 polyfill 进行兼容处理。
如果 callback 函数中抛出了一个异常,该异常将不会被 catch 捕获。
总结
ES8 的 Promise.prototype.finally() 方法为我们提供了一个更好用的方式来处理 Promise 链中无论成功或失败都需要执行的代码。它不仅简化了代码,而且提高了代码的可读性和可维护性。
使用 Promise.prototype.finally() 方法的要点:
注册的回调函数不会改变 Promise 的状态或值。
如果回调函数抛出异常,将不会被 catch 捕获。
该方法可用于在 Promise 链中做清理工作,如关闭数据库连接、销毁资源等。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654593b17d4982a6ebf376bc