使用 ES9 中的 Promise.finally() 解决 Promise 的.then() 和.catch() 问题

在 JavaScript 中,Promise 是一种用于处理异步操作的对象。通过执行异步任务并返回一个 Promise 实例,开发者可以使用 .then() 方法来获取异步操作的结果,使用 .catch() 方法来处理异常情况。然而,在某些情况下,我们需要在无论 Promise 是否成功执行后,都执行一些操作,这时就需要使用 ES9 中引入的 Promise.finally() 方法。

解决已捕获异常导致的问题

对于已捕获的异常,.finally() 方法可以很好地处理它们,确保在 Promise 对象的状态改变后,所包含的 finally 处理程序都能够被执行。在如下示例中,我们模拟了一个返回 Promise 对象的函数,其中的 .catch() 方法捕获了一个异常,并使用 .finally() 方法来展示执行的语句。

上述代码输出的结果为:

通过在最后调用 .finally() 方法,不论 Promise 状态为成功或失败,都会执行 finally 处理程序。

简化 Promise 链式调用

在有需求需要统一一段代码片段时,.finally() 方法还可以简化 Promise 链式调用,使其更加简洁。例如,我们可以在请求数据之前添加一个 loading 标志,在数据请求完毕后,无论成功与否,统一去除 loading 标志。如下是使用 .finally() 方法处理 Promise 链式调用的示例。

上述代码输出结果为:

在上述示例中,我们使用 .finally() 方法在请求完成后统一去除 loading 标志,代码简化并使其更易于维护。

总结

ES9 中引入的 Promise.finally() 方法可以帮助我们解决 Promise 链式调用中状态改变但仍需要处理的问题,以及简化 Promise 链式调用,并提高代码的可读性与维护性。通过本文的讲解,相信读者对 Promise.finally() 方法已经有了深刻的理解与应用。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6540cc397d4982a6eba5c365


纠错
反馈