Promise 的缺陷及如何支持 Promise 链中的取消操作

阅读时长 4 分钟读完

什么是 Promise

Promise 是一种常见的编程技术,用于管理异步操作。 通过对 Promise 对象的操作,可以指定在异步操作完成时执行的代码, 而不必等待操作完成。

Promise 的缺陷

Promise 确实是一个非常有用的技术,但它存在一些缺陷。 一个重要的缺陷是它不支持在 Promise 链中取消操作。 一旦启动了一个异步操作,就不能停止。 如果操作需要更改或中止,只能等待它完成,然后处理结果。 这可能会导致一些问题:

  1. 如果操作需要很长时间才能完成,它可能会阻塞应用程序的用户界面或其他活动。

  2. 如果操作依赖于外部资源,而外部资源在操作完成之前已被释放,操作就会失败。

  3. 如果操作不再需要(例如,因为用户在进行操作时已经执行了另一个操作),那么继续执行该操作可能会浪费系统资源。

如何支持 Promise 链中的取消操作

为了解决这个问题,开发人员可以使用一个名为“Cancelable Promise”的技术。 可取消的 Promise 支持在 Promise 链中取消操作,以便在不必要时停止操作。 可取消的 Promise 有两个重要的修改:

  1. 可取消的 Promise 必须能够在任何时间点取消执行。 这可以通过向操作添加一个取消方法来实现。 取消方法应该能够停止操作并释放任何相关资源。

  2. 当使用可取消的 Promise 时,开发人员需要负责监控一个 Promise 在取消时所必须遵循的规则。 具体来说,Promise 的取消应该能够协调其他 Promise 的状态。 如果一个 Promise 被取消,任何其它与它有关的 Promise 应该被取消。

以下是一个示例 Cancelable Promise 类的代码,它支持 Promise 链中的取消操作:

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

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

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

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

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

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

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

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

该类有以下功能:

  1. 在类构造函数中创建 Promise,该 Promise 的执行器接受两个参数作为成功和失败回调。

  2. 在类中拥有 cancel 方法,用于调用 Promise 的取消处理程序,以停止操作并释放资源。

  3. 还有一个 onCancel 方法,用于添加任何需要运行的取消处理程序。 这些处理程序会在 Promise 取消时调用。

  4. 该类还支持 then 和 catch 方法,以便在 Promise 完成或失败时处理结果。

总结

Cancelable Promise 是解决 Promise 链中无法取消异步操作的一种技术。 该技术可协调其他 Promise 状态,并提供其他必需的控件以提高开发人员的控制能力。

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

纠错
反馈