什么是 Promise
Promise 是一种常见的编程技术,用于管理异步操作。 通过对 Promise 对象的操作,可以指定在异步操作完成时执行的代码, 而不必等待操作完成。
Promise 的缺陷
Promise 确实是一个非常有用的技术,但它存在一些缺陷。 一个重要的缺陷是它不支持在 Promise 链中取消操作。 一旦启动了一个异步操作,就不能停止。 如果操作需要更改或中止,只能等待它完成,然后处理结果。 这可能会导致一些问题:
如果操作需要很长时间才能完成,它可能会阻塞应用程序的用户界面或其他活动。
如果操作依赖于外部资源,而外部资源在操作完成之前已被释放,操作就会失败。
如果操作不再需要(例如,因为用户在进行操作时已经执行了另一个操作),那么继续执行该操作可能会浪费系统资源。
如何支持 Promise 链中的取消操作
为了解决这个问题,开发人员可以使用一个名为“Cancelable Promise”的技术。 可取消的 Promise 支持在 Promise 链中取消操作,以便在不必要时停止操作。 可取消的 Promise 有两个重要的修改:
可取消的 Promise 必须能够在任何时间点取消执行。 这可以通过向操作添加一个取消方法来实现。 取消方法应该能够停止操作并释放任何相关资源。
当使用可取消的 Promise 时,开发人员需要负责监控一个 Promise 在取消时所必须遵循的规则。 具体来说,Promise 的取消应该能够协调其他 Promise 的状态。 如果一个 Promise 被取消,任何其它与它有关的 Promise 应该被取消。
以下是一个示例 Cancelable Promise 类的代码,它支持 Promise 链中的取消操作:
-- -------------------- ---- ------- ----- ----------------- - --------------------- - ------------- - --- ----------------- ------- -- - ------------- - -------- ------------ - ------- --------- ------- -- - -- ------------------- - --------------- - -- -------- -- - -- ------------------- - --------------- - - -- --- ---------------- - ------ -------------------- - --- - ---------------- ----------- - ------ ------------------------------ ------------ - ----------------- - ------ -------------------------------- - -------- - -- ------------------ - ------- - ---------------- - ----- -------------------------------------- -- - ---------- --- - ------------------ - ------------------------------------ - -
该类有以下功能:
在类构造函数中创建 Promise,该 Promise 的执行器接受两个参数作为成功和失败回调。
在类中拥有 cancel 方法,用于调用 Promise 的取消处理程序,以停止操作并释放资源。
还有一个 onCancel 方法,用于添加任何需要运行的取消处理程序。 这些处理程序会在 Promise 取消时调用。
该类还支持 then 和 catch 方法,以便在 Promise 完成或失败时处理结果。
总结
Cancelable Promise 是解决 Promise 链中无法取消异步操作的一种技术。 该技术可协调其他 Promise 状态,并提供其他必需的控件以提高开发人员的控制能力。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65a3b3beadd4f0e0ffbd8a04