我如何创建一个简单的调度程序,将每个项目延迟一秒?我想将它用于Observable,是的,我知道可以通过多种其他方式完成,我希望使用自定义调度程序来完成它。
这里有一些相关的教程:http://codebetter.com/matthewpodwysocki/2010/05/12/introduction-to-the-reactive-extensions-for-javascript-custom-schedulers/但它已经过时了,现在API看起来非常不同。
当前的文档不是很常用,但我想我应该使用Rx.Scheduler.prototype.schedulePeriodic
,虽然我不知道action
参数应该是什么。
答案 0 :(得分:10)
要从基本计划程序创建新的计划程序,您应该查看scheduler.js。基本上你需要了解如何做4件事,你将自动免费获得所有定期的,递归的,异常处理扩展。
Scheduler
的功能签名是
function Scheduler(now, schedule, scheduleRelative, scheduleAbsolute){}
要打破它:
now - 一个表示调度程序时间概念的函数,在调用它时,它应该返回调度程序认为现在的内容。默认设置是返回new Date()
schedule - 应尽快执行操作时调用的函数此函数具有签名
function scheduleNow(state, action) {}
其中action将具有签名
function action(scheduler, state) {}
它用于在调度程序上安排立即操作。立即将具有不同的含义,具体取决于您的调度程序,但是,对于大多数情况(immediateScheduler
除外),您将希望在下一个tick
中发生这种情况,无论这对您的调度程序意味着什么。您可以查看defaultScheduler,它可以帮助您找出环境中最佳方法(setImmediate
是第一选择)。在你的情况下,因为立即意味着“从现在起一秒钟”,你可能只需将scheduleRelative
与this.scheduleRelativeWithState(state, 1000, action)
function scheduleRelative(state, dueTime, action) {}
scheduleRelative 当行动应该在将来的某个时间相对于现在发生时调用:
setTimeout
同样,这可能会使用dueTime
Date
作为时间参数。
scheduleAbsolute 这可能是最容易实现的,它与 scheduleRelative 具有相同的签名,但不是花费时间 relative 到现在无论现在(通常是now
个对象),它都需要一个绝对的时间来转换它,你只需要从中减去this.scheduleWithRelativeAndState
并将其传递给Disposable
(参见我告诉过你)你会得到免费的东西。)
在所有情况下,3个计划方法都返回setTimeout
,这用于尽力取消操作。在scheduleRelative
的情况下,这将使用返回的id清除超时。
要最终回答你的问题,如果你想将所有内容延迟1秒,最好的方法可能是在http://www.GoodStuff.xxx/services/stu/query?where=1%3D1&text=&objectIds=231699%2C232002%2C231700%2C100646&time=
中为每个预定事件添加1秒/ 1000毫秒的转换。