ES7 中 Promise.prototype.finally() 方法的常见问题和错误

阅读时长 4 分钟读完

在 ES7 中,Promise.prototype.finally() 方法被引入到了 Promise 中。它能够在 Promise 执行结束后,无论是成功还是失败,都能够执行一段指定的代码。然而,这个方法在使用过程中也存在一些常见的问题和错误,下面我们来详细了解一下。

Promise.prototype.finally() 方法的使用方法

Promise.prototype.finally() 方法接受一个回调函数作为参数,并且该回调函数没有任何参数,只有一个返回值,返回值会被忽略。该方法返回一个新的 Promise 对象,该 Promise 对象的状态和值与原 Promise 对象保持一致。

下面是 Promise.prototype.finally() 方法的使用示例:

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

在上面的代码中,我们创建了一个 Promise 对象,然后在该 Promise 对象上调用了 then() 方法和 catch() 方法。最后,我们在 Promise 对象上调用了 finally() 方法,并传入一个回调函数。当 Promise 对象执行结束时,不管是成功还是失败,都会执行 finally() 方法中的回调函数。

常见问题和错误

1. finally() 方法中的回调函数没有返回值

Promise.prototype.finally() 方法中的回调函数没有返回值,只有一个返回值,而且该返回值会被忽略。如果你在回调函数中返回了一个值,那么该值会被忽略,不会影响 Promise 的状态和值。

在上面的代码中,我们在 finally() 方法中返回了一个值,但是该值会被忽略,不会影响 Promise 的状态和值。

2. finally() 方法中的回调函数返回一个 Promise 对象

如果 finally() 方法中的回调函数返回一个 Promise 对象,那么该 Promise 对象会被等待,直到该 Promise 对象执行结束后,再继续执行后面的 then() 方法或 catch() 方法。

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

在上面的代码中,我们在 finally() 方法中返回了一个 Promise 对象,该 Promise 对象会在 1 秒钟后执行结束。在该 Promise 对象执行结束后,才会执行后面的 then() 方法。

3. finally() 方法中的回调函数抛出异常

如果 finally() 方法中的回调函数抛出异常,那么该异常会被捕获,并且会影响 Promise 的状态和值。

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

在上面的代码中,我们在 finally() 方法中抛出了一个异常,该异常会被捕获,并且会影响 Promise 的状态和值。

结论

Promise.prototype.finally() 方法是一个非常实用的方法,它可以让我们在 Promise 执行结束后,无论是成功还是失败,都能够执行一段指定的代码。在使用该方法时,需要注意回调函数的返回值和异常处理,避免出现常见的问题和错误。

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

纠错
反馈