ES9 中的 Promise.prototype.finally 详解

· 约 4 分钟读完

在 ES6 中引入 Promise 对象以来,Promise 已经成为了现代 JavaScript 开发的重要特性之一。而在 ES9 中,Promise 对象也迎来了一个新的成员——Promise.prototype.finally,它为我们处理 Promise 对象的异常情况提供了更加灵活的方式。下面我将为大家详细解释 Promise.prototype.finally 的作用和使用方法。

Promise.prototype.finally 的作用

Promise.prototype.finally 的作用是允许开发者在一个 Promise 结束后执行一些收尾工作,无论这个 Promise 的状态是成功还是失败。这些收尾工作包括清理资源、控制程序流程等操作。

在 ES6 中,我们通常使用 then() 来处理 Promise 结束后的一些操作,比如:

然而,这样的代码稍显复杂,尤其是当有多个 then() 操作时。而 Promise.prototype.finally 就是为了解决这个问题而生的。

Promise.prototype.finally 的使用方法

使用 Promise.prototype.finally 也很简单,只需要将 finally() 作为链式调用的最后一个方法即可:

可以看到,在这种方式下,我们无需关心前面的 then() 返回的值或者发生的异常,而只需在 finally() 中处理后续操作即可。Promise.prototype.finally 会在 Promise 执行完毕后立即执行,无论 Promise 结束的状态是完成还是失败。

值得注意的是,finally() 传入的回调函数是不接受参数的,因为其作为收尾工作,不关心 Promise 结束的状态。

Promise.prototype.finally 使用示例

让我们通过一个具体的例子来了解 Promise.prototype.finally 的使用方法。

这个示例演示了一种常见的 Promise 处理方法:封装一个 fetchData 方法来统一处理 fetch 请求,并将异常情况抛出到上一级调用。在 fetchData 方法的末尾,我们使用了 Promise.prototype.finally 来输出请求结束日志,无论请求成功还是失败都会执行。

Promise.prototype.finally 的指导意义

Promise.prototype.finally 的出现简化了 Promise 的使用方法,使得开发者可以更加方便地编写高质量的异步代码。其可以帮助我们在遇到异常情况时,快速恢复现场,并执行一些清理工作。

但是,使用 Promise.prototype.finally 也需要注意一些细节和潜在的风险,比如滥用 finally() 会导致代码过于冗长,finally() 中的错误可能会被隐藏,以及 finally() 中的同步代码执行影响异步代码的运行等问题。因此,在使用 Promise.prototype.finally 时需要深入了解其特性,谨慎处理可能的异常情况。

结语

Promise.prototype.finally 是 ES9 中一个比较特殊的 Promise 方法,其可以使我们避免冗长的代码,更加方便地处理异步任务结束后的交接工作。同时,其也需要我们仔细理解其使用方法,谨慎地处理可能的异常情况。相信随着其被更多开发者使用,Promise.prototype.finally 将会成为未来前端开发中不可或缺的重要特性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d67acca941bf7134c402ad