ES9 Promise.prototype.finally 兼容方案

在 ES9 中,Promise 新增了一个方法:Promise.prototype.finally()。该方法会在 Promise 对象结束时,无论是 resolve 还是 reject,都会执行一些操作。然而,由于该方法是 ES9 中新增的,所以在某些旧浏览器中并不支持该方法。

本文将介绍如何兼容 ES9 Promise.prototype.finally() 方法,并包含相关的示例代码。

解决方案

为了实现 ES9 Promise.prototype.finally() 方法的兼容性,我们可以通过以下两种方式:

手动实现

我们可以手动实现一个 Promise.prototype.finally() 方法。该方法可以使用 Promise.prototype.then() 和 Promise.prototype.catch() 方法来实现,例如:

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

该兼容方案的原理是先调用原来的 Promise.prototype.then() 或 Promise.prototype.catch() 方法,然后在返回的新 Promise 对象中再调用 callback 函数。当步骤执行完毕后,我们需要在 then() 和 catch() 函数中返回原始的值或错误信息。通过这种方式,我们就可以兼容 ES9 Promise.prototype.finally() 方法。

使用 polyfill

除了手动实现之外,我们还可以使用 polyfill 库来兼容 ES9 Promise.prototype.finally() 方法。其中,为了兼容 ES9 Promise.prototype.finally() 方法,我们可以使用 promise-polyfill 库。该库可以在不支持 Promise 方法的浏览器上使用 Promise 对象,并可以模拟 ES9 Promise.prototype.finally() 方法。

例如:

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

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

示例代码

以下是 Promise.prototype.finally() 的示例代码:

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

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

该示例中,我们首先创建了一个 Promise 对象,它会在 resolve() 方法中返回“成功!”字符串。然后,我们调用 Promise.prototype.then() 方法来打印“成功!”字符串。接着,我们调用 Promise.prototype.catch() 方法来捕获异常情况。最后,我们使用 Promise.prototype.finally() 方法,在 Promise 对象结束时打印“结束!”字符串。如果运行该示例,输出结果将为:

---
---

结论

ES9 Promise.prototype.finally() 方法为 Promise 对象提供了一种可以处理 Promise 对象结束时的代码。然而,该方法在某些旧浏览器中并不支持。通过手动实现或使用 polyfill 库,我们可以兼容 ES9 Promise.prototype.finally() 方法,让我们在处理 Promise 对象时更加方便和高效。

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