ES9 中的 Promise.prototype.finally() 方法
Promise 是 ECMAScript6 中新增的对象,用于解决异步编程的问题,使得我们更加方便的处理异步操作。在 ES9 中,Promise.prototype.finally() 方法被添加到 Promise 的原型链中,用于处理最终的清理操作,本文将对该方法进行详细的介绍,并为读者提供示例代码。
- 简介
Promise.prototype.finally() 方法用于指定不管 Promise 状态如何都会执行的操作,可以理解为一种“收尾”的操作,无论 Promise 执行结果是成功还是失败,都可以在 finally 函数中进行一些善后工作。该方法不接受任何参数,也不能改变任何 Promise 状态。
- 语法
Promise.prototype.finally(): Promise
- 示例代码
3.1 Promise 状态成功
const myPromise = Promise.resolve('Promise resolved.'); myPromise.then(response => { console.log(response); }).finally(() => { console.log('Promise finished.'); });
运行结果:
Promise resolved. Promise finished.
3.2 Promise 状态失败
const myPromise = Promise.reject('Promise rejected.'); myPromise.catch(error => { console.log(error); }).finally(() => { console.log('Promise finished.'); });
运行结果:
Promise rejected. Promise finished.
- 深入理解
在 Promise 中,我们经常会遇到需要在 Promise 运行结束后处理一些清理操作的情况,例如关闭数据库连接、释放资源等等。在 ES6 之前我们可以通过在 then 和 catch 方法中分别执行代码来实现,但是如果执行结束后还需要进行一些清理工作的话,就需要写重复的代码,而且如果 Promise 的执行发生了错误,代码就会出现重复,不利于代码的维护。
在 ES9 中添加了 Promise.prototype.finally() 方法,来处理 Promise 运行结束后的一些清理操作,它会在 Promise 完成后,无论 Promise 是否成功,都会执行一段相应的代码。这样,我们就可以把与 Promise 相关的清理工作作为一个单独的方法,将其放入 finally 中,并且只需要编写一次即可。
另外,需要注意的是,Promise.prototype.finally() 方法本身不会改变 Promise 的状态,也就是说,它返回的 Promise 对象其状态与原来的 Promise 对象状态相同,但是它会在 Promise 完成时执行回调函数。
- 总结
Promise.prototype.finally() 方法是 ES9 新增的方法,用于对 Promise 运行结束后的一些清理操作进行处理。可以使我们更加方便地处理 Promise 相关的代码,减少代码的冗余。需要注意的是,它返回的 Promise 对象其状态与原来的 Promise 对象状态相同,但是它会在 Promise 完成时执行回调函数。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652b581e7d4982a6ebd4cc06