Is it safe to resolve a promise multiple times?

在前端开发中使用 Promise 是很常见的。但是,有时我们会想知道是否可以多次解决同一个 Promise 实例并且不会出现问题。本文将回答这个问题,并为您提供一些指导意义。

解决一个 Promise 的过程

当我们创建一个 Promise 时,它处于 "pending" 状态,并且等待被 "resolved" 或 "rejected"。

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

如果 Promise 成功了,那么我们调用 resolve 方法来传递一个值,否则我们调用 reject 并传递一个错误对象。在成功的情况下,我们传递的值将作为 then() 函数的参数。

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

可以多次解决一个 Promise 吗?

对于这个问题的短答案是:不行。Promise 对象只能被解决一次。

如果尝试多次解决一个已经被解决的 Promise,第二次及以后的调用就会被忽略,并且不会产生任何效果。例如:

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

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

在上面的示例中,我们尝试通过多次调用 resolve 方法来解决同一个 Promise。但是,在第一次调用之后,第二次调用被忽略了。

解决同一个值的不同 Promise 实例

虽然不能多次解决同一个 Promise 对象,但是可以将同一个值分别解决到不同的 Promise 实例上。例如:

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

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

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

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

在这个示例中,我们创建了两个 Promise 对象,并使用相同的值将它们各自解决。当我们使用 then() 方法时,每个 Promise 都会将该值作为参数传递给回调函数。

结论

在 JavaScript 中,Promise 对象只能被解决一次,多次解决会被忽略。但是可以将同一个值分别解决到不同的 Promise 实例上。如果您尝试重复解决 Promise,将不会产生任何效果。因此,请确保只对 Promise 进行一次解决。

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