gpt4 book ai didi

rxjs - 创建一个简单的调度程序

转载 作者:行者123 更新时间:2023-12-01 07:36:51 26 4
gpt4 key购买 nike

我将如何创建一个简单的调度程序,将每个项目延迟一秒?我想将它用于 Observable,是的,我知道可以通过多种其他方式完成,我只是想使用自定义调度程序来完成它。

这里有一些相关的教程:http://codebetter.com/matthewpodwysocki/2010/05/12/introduction-to-the-reactive-extensions-for-javascript-custom-schedulers/但它已经过时了,而且 API 现在看起来非常不同。

当前的文档也不是很有用,但我想我应该使用 Rx.Scheduler.prototype.schedulePeriodic ,虽然不知道是什么action参数应该是

最佳答案

要从基本调度程序创建新调度程序,您应该查看 scheduler.js .本质上,您需要了解如何做 4 件事,然后您将自动免费获得所有周期性、递归、异常处理扩展。
Scheduler的函数签名是

function Scheduler(now, schedule, scheduleRelative, scheduleAbsolute){}

分解:

现在 - 一个表示调度程序时间概念的函数,在调用它的任何时候都应该返回调度程序现在认为的内容。默认是简单地返回 new Date()
日程安排 - 应尽快执行操作时调用的函数 此函数具有签名
function scheduleNow(state, action) {}

行动将有签名
function action(scheduler, state) {}

它用于在调度程序上安排即时操作。根据您的调度程序,立即将具有不同的含义,但是,在大多数情况下( immediateScheduler 除外)您希望它在下一个 tick 中发生。 ,无论这对您的调度程序意味着什么。你可以看看 defaultScheduler ,它做了一些工作来确定环境中的最佳方法( setImmediate 是第一选择)。在您的情况下,由于立即实际上意味着“从现在开始的一秒钟”,您可能只需将其路由到 scheduleRelativethis.scheduleRelativeWithState(state, 1000, action)
scheduleRelative 当操作应该在相对于现在的 future 某个时间发生时调用:
function scheduleRelative(state, dueTime, action) {}

同样,这可能会使用 setTimeoutdueTime作为时间参数。

scheduleAbsolute 这可能是最容易实现的,它具有与 scheduleRelative 相同的签名,但是它不是花费相对于现在的时间,而是花费绝对时间而不考虑现在(通常是 Date 对象),转换它你真的只需要减去 now从它并将其传递给 this.scheduleWithRelativeAndState (看我告诉过你你会得到免费的东西)。

在所有情况下,3 个调度方法都返回 Disposable ,这用于尽力取消操作。在 setTimeout的情况下这将使用返回的 id 清除超时。

最后回答您的问题,如果您想将所有内容延迟 1 秒,最好的方法可能是在 scheduleRelative 中应用转变。为每个计划事件添加 1 秒/1000 毫秒。

关于rxjs - 创建一个简单的调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30917363/

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