ES9 中新增的 Promise.prototype.finally() 方法解决 Promise 异常捕获问题

阅读时长 3 分钟读完

ES9 中新增的 Promise.prototype.finally() 方法解决 Promise 异常捕获问题

在前端开发中,Promise 已经成为了异步编程的不二选择。而在 ES9 中,引入了 Promise.prototype.finally() 方法,它能够为 Promise 对象添加一个状态不管怎样都会执行的回调函数,解决了 Promise 异常捕获问题。

Promise.prototype.finally() 是一个实例方法,它不接受任何参数,并且返回一个新的 Promise 对象。当 Promise 状态变成 fulfilled 或 rejected 时,它都会执行。Promise.prototype.finally() 方法返回的 Promise 对象将会是前一个 Promise 对象的状态和值,如果在调用 Promise.prototype.finally() 时出现异常,那么返回的 Promise 对象会将该异常传递给下一个 Promise。

接下来看一个示例,首先我们需要编写一个 Promise:

-- -------------------- ---- -------
-------- ---------------- -
  ------ --- ----------------- ------- -- -
    -- ---- - -- -
      -------------
    - ---- -
      ---------- ---------- ------ -----
    -
  ---
-

我们可以将其使用 then 方法以及 catch 方法进行调用:

这会输出 reject: num 必须大于等于 0,这符合我们的预期。

如果我们需要在 Promise 的结束状态(无论是 resolve 还是 reject)之后执行某些逻辑,可以使用 finally 方法:

这会输出 reject: num 必须大于等于 0finally,说明 finally 方法确实在 Promise 状态改变之后被执行了。

在实际开发中,finally 方法能够解决一些异常情况下的资源回收问题。比如我们需要在某些 HTTP 请求完成之后关闭 loading 状态,无论请求成功或失败:

在这个例子中,无论请求成功或失败,finally 方法中的 hideLoading 函数都能够被执行到,用来关闭加载状态。

总结来说,Promise.prototype.finally() 方法能够在 Promise 状态变化之后无论成功或失败,都能够执行一些逻辑,解决了一些异常情况下的资源回收问题。

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

纠错
反馈