Promise 中的 then 方法和 done 方法的区别

在 JavaScript 中,Promise 是一个具有强大功能的对象,它可以让我们优雅地处理异步事件。但是在 Promise 中,then 方法和 done 方法的用法和作用有所不同。下面我们将详细讲解它们两个之间的区别和使用时的注意点。

Promise

Promise 是一个用于异步编程的构造函数。通过 Promise ,我们可以以一种更加直观和简单的方式来处理异步事件。

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

在上面的代码中,我们创建了一个 Promise 对象,它将在 1 秒后返回值为 10。

then 方法

then 方法是 Promise 比较常见的一个方法之一,它接受两个参数:一个是成功的回调函数,一个是失败的回调函数。

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

在上面的代码中,我们使用 then 方法为 Promise 添加了一个成功的回调函数,并在这个回调函数中打印了 Promise 执行的结果。如果 Promise 执行失败,则会调用第二个回调函数。

需要注意的是,在 then 方法中,我们需要手动捕获 Promise 的错误,否则错误将无法被处理,这可能会导致应用程序的崩溃。

done 方法

done 方法也是用于执行 Promise 的回调函数,但与 then 方法的主要区别是,done 方法不会返回新的 Promise 对象,而是在前一个完成后立即执行。

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

上面的代码中,我们使用 done 方法为 Promise 添加一个成功的回调函数,并在这个回调函数中打印了 Promise 的结果。需要注意的是,done 方法不接受失败的回调函数,因此在使用时需要自行处理异常。

区别和共同点

then 方法和 done 方法在作用上类似,都是用于处理 Promise 的回调函数。但是,它们存在以下区别:

  1. then 方法会返回一个新的 Promise 对象,使得可以继续链式调用 then 方法进行处理,而 done 方法不会返回新的 Promise 对象;
  2. then 方法需要手动捕获异常,否则可能导致应用程序崩溃,而 done 方法需要自行处理异常;
  3. then 方法在链式调用中可以作为中间链接使用,而 done 方法必须在链式调用的最后使用,否则会导致代码无法执行。

除了上述区别,then 方法和 done 方法还有以下共同点:

  1. 同时都是用于处理 Promise 的回调函数;
  2. 都有成功的回调函数和失败的回调函数。

示例代码

下面我们将结合一个特定的例子,来演示在实际开发中如何使用这两个方法:

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

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

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

上面的代码中,我们创建了一个名为 incrementAsync 的函数,它可以将参数加 1 后返回。我们首先使用 then 方法对 Promise 进行链式调用,以便对于每个值添加 1。而在第二个例子中,我们使用 done 方法来添加回调函数,并处理有可能出现的异常。

结论

在实际开发中,then 方法和 done 方法都可以用来执行 Promise 的回调函数,但它们之间存在着不同的设计理念和使用方式。我们需要根据实际情况来选择使用哪一个方法,并注意它们之间的差异和注意事项,以便能够更好地处理异步事件。

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