- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设我想将一个 Scheduler 传递给一个 RxJS 运算符,使其每 5 秒发出一次通知。当然,这很容易做到,只需使用 interval
或其他现有运算符即可。但是,如果我真的想使用调度程序来完成它,我该怎么做呢?
我的第一个想法是继承Rx.Scheduler.default
。那是要走的路吗?如果是这样,该子类看起来如何?同样,我知道这是一种复杂的方法来完成一些使用运算符很容易的事情,但我只是对自定义调度程序感到好奇。
最佳答案
操作应该始终独立于用于实现它们的调度程序。调度员只知道一件事,时间。每个调度程序都是专门为处理自己的时间概念而构建的。它们显然不是为处理特定运算符而构建的,因为那会是一个问题。
因此,对于您创建重复性任务的既定目标,我不建议尝试实际创建您自己的调度程序,因为根本不需要。调度程序带有一个已经支持此功能的接口(interface)。
您可以使用 schedulePeriodic
或 scheduleRecursiveFuture
来完成此操作。
//Using periodic
Rx.Observable.interval = function(period, scheduler) {
return Rx.Observable.create(function(observer) {
return scheduler.schedulePeriodic(0, period, function(count) {
observer.onNext(count);
return count + 1;
});
});
};
//Using scheduleRecursive
Rx.Observable.interval = function(period, scheduler) {
return Rx.Observable.create(function(observer) {
return scheduler.scheduleRecursiveFuture(0, period, function(count, self) {
observer.onNext(count);
self(period, count + 1);
});
});
};
前者应该更容易理解,本质上它只是根据周期参数安排某些事情在时间间隔内重复发生。
后者通常有点难以解释,但本质上你是在安排一个任务,然后在执行该任务的某个时候你正在重新安排它(这就是 self
参数)正在做。这允许您使用 period 参数获得相同的效果。
这项工作的时间都直接受到您决定传递给运算符(operator)的调度程序的影响。例如,如果您传入 default
,它将尝试使用最佳方法进行异步完成,无论是 setTimeout
、setInterval
还是还有一些我不记得了。如果你传入一个 TestScheduler
或一个 HistoricalScheduler
这实际上不会做任何事情,直到你增加它们各自的时钟,但这样做可以对时间流逝进行细粒度控制.
tl;dr 如果您有一些新的整体时间概念要表达,则只实现新的 Scheduler
,否则使用现有 API 处理任何 调度程序
最适合您希望的时间流逝方式。
关于javascript - 将非标准调度程序传递给运算符(operator),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32873730/
我正在编写一个程序,它必须规范化音频 *.wav 文件。有一个“显示头部数据”的任务:ChunkId、ChunkSize 等等。 我想创建一个名为display_hdr 的函数(为了减少main.c
我有一个带有缩放类的 css 文件:1。 我在浏览器控制台上收到以下错误。 此页面使用非标准的“缩放”属性。相反,您可以将 calc() 或“transform”与“transform-origin:
我想模拟来自非标准密度函数的数据。我已经找到以下链接( How do I best simulate an arbitrary univariate random variate using its
使用已安装的 JDK 版本时,默认系统语言环境报告正确,但当我使用 adoptopenjdk-11 时tar.gz ,总是报告为en_US import java.util.Locale; publi
我如何强制 automake 为非标准 C++ 后缀文件生成依赖项跟踪?特别是我的意思是生成 .deps 目录文件内容。我也在使用 libtool。 谢谢 最佳答案 看看this section in
我有一个快速解决方法的问题,以享受非标准 gnu 的好处 case ranges .例如,非标准: case 1 ... 5: 可以替换为: case 1: case 2: case 3: case
我有两个“日期”字段需要加入。 第一个是格式为 yyyy-mm-dd hh:mm:ss 的普通日期时间 第二个是红头步骤子格式的 varchar(8) mmddyyyy 现在这变得很痛苦,因为没有简单
我有一个符合以下约定的 CSV val1,val2,outerStruct1{valA,valB,innerStruct2{valX, valY},valC},... 问题是当我尝试正则表达式oute
我有数据列: id name type number 1 n1 t1 num1 2 n2 t1 num2 3 n3 t1 num3 4
我正在为 Shelly 系列设备开发 openHAB2 绑定(bind)。 http接口(interface)运行良好,但无法注册获取COAP事件。 有人有使用 Californium 框架的经验吗?
我在 UILabel 上显示商标“TM”字符时遇到了一些问题。 出现问题的“TM”字符是\U0099 而不是通常的\U2122 稍微深挖一下,发现“TM”字\U0099属于极少数的汉字。 所以我猜 i
请原谅我的无知,我是 c++ 的新手。 完整错误信息: coog.cpp(74): error C3867: 'Manager::start_foo': 非标准语法;使用“&”创建指向成员的指针 我正
我有一个可以生成如下 JSON 的 API: )]}', { //JSON DATA } //JSON DATA 是有效的 JSON,但顶部的 )]}', 不是。 当我尝试通过逻辑应用获取此数
我尝试使用 Apache Ant Get task获取我们公司另一个团队生成的 WSDL 列表。他们将它们托管在 http://....com:7925/services/ 上的 weblogic 9
我在 Google App Engine 上有一个 servlet,它从页面获取文本,将其存储为实体,然后将其发送回客户端。当我存储“You're”一词时,它会像平常一样在 GAE 本地存储中显示为“
这个问题在这里已经有了答案: Is there a way to access the underlying container of STL container adaptors? (10 个答案
我在编译这段代码时遇到了问题: void MyClass::MyMethod(Type * new_ptr) { myInternalUniquePtr_->swap(std::unique_
我有两个 Eigen::VectorXd 对象,A 和 B,具有相同的维度 n。 我想创建一个新的 vector C,这样: 如果 B[i] 是 NaN,则 C[i] = A[i] 否则:C[i] =
在 C++ 中,以这种格式向日期添加一天的最简单方法是什么: “20090629-05:57:43” 可能使用 Boost 1.36 - Boost::date、Boost::posix_date 或
我正在使用 Apache HTTPComponents 4.3 的 HttpCore 库编写一个 HTTP 服务器( java )。我的服务器必须能够接收具有非标准 HTTP 方法(GET、POST、
我是一名优秀的程序员,十分优秀!