ES9 中 Promise.prototype.finally() 返回值的详细解释

阅读时长 4 分钟读完

在 ES9 中,Promise 增加了一个新的实例方法 Promise.prototype.finally()。这个方法在 Promise 完成后,不论 Promise 的状态是成功还是失败,在 Promise 返回结果前都会执行,用于执行一些清理操作或者设置最终状态。

ES9 中,Promise.prototype.finally() 方法可以在 Promise 链中的任何位置使用,并返回一个 Promise 对象,这个 Promise 对象的状态和值与原 Promise 对象保持一致。

Promise.prototype.finally() 方法语法

Promise.prototype.finally() 方法的语法如下:

Promise.prototype.finally() 方法返回值

Promise.prototype.finally() 方法返回一个 Promise 对象,这个 Promise 对象的状态和值与原 Promise 对象保持一致。

无论 Promise 对象成功或者失败,Promise.prototype.finally() 方法都会在最后执行,并返回一个新的 Promise 对象。

如果 Promise.prototype.finally() 方法中抛出了一个错误,会将原来的 Promise 对象的状态改为 reject,且 reject 的值就是抛出的错误信息。如果没有抛出错误,则原来的 Promise 对象状态不变。

下面我们看一下具体的使用示例。

Promise.prototype.finally() 方法使用示例

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

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

在上面的示例中,我们使用 Promise 实例的 then 和 catch 方法处理 Promise 的成功或者失败,同时使用 Promise.prototype.finally() 方法对代码进行清理操作或者设置最终状态。

如果我们运行程序,会随机的生成一个数字,如果数字大于 5,Promise 对象就会 resolved,否则就会 rejected。不论 Promise 最后的状态是成功还是失败,Promise.prototype.finally() 方法都会在最后执行,并返回一个新的 Promise 对象。我们看到最终的控制台输出如下:

注意到,这里仅仅是把 Promise 对象在 then 和 catch 中的状态打印出来,实际生产环境中可能有其它一些稍显复杂的操作,但读者可以根据自己的业务场景进行相应的扩展。

总结

在 ES9 中,Promise.prototype.finally() 方法作为一个典型的方法促进了对异步编程的进一步优化。通过这个方法,我们可以完成更多的清理操作和设置最终状态,清晰利用了 Promise 链式结构的特点,提高代码可读性及可维护性。

在使用 Promise.prototype.finally() 方法时,我们必须注意,它使用时的语法和一些注意事项,这样才能在实际生产环境中更好地使用和维护代码。

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

纠错
反馈