gpt4 book ai didi

rxjs - RxJS 中的 `Scheduler` 是什么

转载 作者:行者123 更新时间:2023-12-03 05:32:12 25 4
gpt4 key购买 nike

我看到过这个词 Scheduler在文档中非常频繁地出现。

但是,这个术语是什么意思?我什至不知道如何使用所谓的调度程序。官方文档没有告诉我 Scheduler 到底是什么。这只是 RxJS 中的一个常见概念还是一个特定概念?

最佳答案

Rx 调度程序提供了一个抽象,允许工作安排在将来运行,而调用代码无需了解用于安排工作的机制。

每当 Rx 方法需要生成通知时,它都会在调度程序上安排工作。通过向 Rx 方法提供调度程序而不是使用默认的调度程序,您可以巧妙地控制这些通知的发送方式。

在 Rx 的服务器端实现(例如 Rx.NET)中,调度程序发挥着重要作用。它们允许您在线程池或专用线程上安排繁重的工作,并在 UI 线程上运行最终订阅,以便您可以更新您的 UI。

当使用 RxJs 时,实际上很少需要担心大多数方法的调度程序参数。由于 JavaScript 本质上是单线程的,因此没有太多调度选项,默认调度程序通常是正确的选择。

唯一真正的选择是:

  • immediateScheduler - 立即同步运行工作。有点像根本不使用调度程序。这样安排的工作就可以保证同步运行。
  • currentThreadScheduler - 与 immediateScheduler 类似,工作会立即运行。但是,它不会递归地运行工作。因此,如果工作正在运行并安排更多工作,则该额外工作将被放入队列中,以便在当前工作完成后运行。因此,工作有时同步运行,有时异步运行。该调度程序对于避免堆栈溢出或无限递归很有用。例如,如果 Rx.Observable.of(42).repeat().subscribe()immediate 调度程序上运行,则会导致无限递归,但由于 return 默认在 currentThread 调度程序上运行,避免无限递归。
  • timeoutScheduler - 唯一支持计划在未来运行的工作的调度程序。本质上使用 setTimeout 来安排所有工作(尽管如果您安排工作“立即”运行,那么它会使用其他更快的异步方法来安排工作)。此调度程序上安排的任何工作都保证异步运行。

现在可能还有更多,例如安排浏览器动画帧工作的调度程序等。

如果您尝试编写可测试的代码,那么您几乎总是希望提供调度程序参数。这是因为在您的单元测试中,您将创建 testScheduler 实例,这将使您的单元测试控制 Rx 代码使用的时钟(从而控制操作的精确时序)。

关于rxjs - RxJS 中的 `Scheduler` 是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28145890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com