Rxjs 创建一个简单的调度程序

Rxjs 创建一个简单的调度程序,rxjs,Rxjs,我如何创建一个简单的调度程序,比如说,将每个项目延迟一秒钟?我想把它用于一个可观察的对象,是的,我知道这可以通过多种其他方式完成,但我想用一个定制的调度器来完成 这里有一些相关的教程:但是它已经过时了,API现在看起来非常不同了 当前的文档也不是很有用,但是我想我应该使用Rx.Scheduler.prototype.schedulePeriodic,尽管我不知道action参数应该是什么。要从基本调度器创建一个新的调度器,您应该看看。基本上,您需要了解如何做4件事,并且您将自动免费获得所有定期、

我如何创建一个简单的调度程序,比如说,将每个项目延迟一秒钟?我想把它用于一个可观察的对象,是的,我知道这可以通过多种其他方式完成,但我想用一个定制的调度器来完成

这里有一些相关的教程:但是它已经过时了,API现在看起来非常不同了


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

要从基本调度器创建一个新的调度器,您应该看看。基本上,您需要了解如何做4件事,并且您将自动免费获得所有定期、递归、异常处理扩展

调度程序的函数签名为

function Scheduler(now, schedule, scheduleRelative, scheduleAbsolute){}
要分解它:

现在-一个表示调度器时间概念的函数,在调用该函数时,它应该返回调度器认为现在是什么。默认情况下,只需返回
newdate()

调度-在应尽快执行操作时调用的函数此函数具有签名

function scheduleNow(state, action) {}
action将在何处签名

function action(scheduler, state) {}
它用于在计划程序上计划即时操作。依您的计划程序而定,Immediate将具有不同的含义,但是,在大多数情况下(
immediateScheduler
除外),您希望在下一个
勾选
,无论这对您的计划程序意味着什么。您可以看看,它做了一些工作,以确定在环境中最好的方法是什么(
setImmediate
是首选方法)。在您的情况下,由于immediate实际上意味着“从现在起的一秒钟”,您可能只需使用
this.scheduleRelativeWithState(state,1000,action)

scheduleRelative当操作应该在未来某个时间发生时,相对于现在调用此函数:

function scheduleRelative(state, dueTime, action) {}
同样,这可能会使用
setTimeout
dueTime
作为时间参数

scheduleAbsolute这可能是最容易实现的,它与scheduleRelative具有相同的签名,但是它不是相对于现在占用一个时间,而是占用一个与现在无关的绝对时间(通常是
日期
对象),要转换它,你只需要从中减去
,然后将它传递到
this.scheduleWithRelativeAndState
(见我告诉过你你会得到免费的东西)

在所有情况下,3种计划方法都会返回一个
一次性的
,用于尽最大努力取消操作。在
setTimeout
的情况下,这将使用返回的id清除超时


最后要回答您的问题,如果您想将一切延迟1秒,最好的方法可能是在
scheduleRelative
中应用一个移位,为每个计划的事件添加1秒/1000毫秒。

非常好的解释,谢谢。我仍然对
disposable.setDisposable(action(scheduler,state))有点困惑默认值
调度程序示例中的code>。这条线的目的是什么?这里的行动到底是什么?这句话有两个目的。1) 它正在执行计划的
操作
。2) 它支持递归调度或异步操作,基本上在这两种情况下,它都应该返回一个可取消结果操作的一次性操作。至于什么是
action
,它可以是调度程序安排的任何工作(通常是传递给操作符的闭包的函数包装)。