Rxjs:扫描操作符
Posted
技术标签:
【中文标题】Rxjs:扫描操作符【英文标题】:Rxjs: The scan operator 【发布时间】:2016-11-06 09:26:51 【问题描述】:如果我将扫描替换为地图,我一直在阅读此代码,我无法获得未定义的属性“getTime”,为什么会发生这种情况? /p>
this.clock = Observable.merge(
this.click$,
Observable.interval(5000)
)
.startWith(new Date())
.map((acc : Date)=>
const date = new Date(acc.getTime());
date.setSeconds(date.getSeconds() + 1);
return date;
);
【问题讨论】:
console.log(acc)
的输出是什么?
其显示未定义
请看以下调试问题的建议:***.com/help/mcve
第二个建议是不要假设什么,而是阅读您正在使用的函数的文档:github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/… for rxjs v4.请注意,对于 Rxjs v2,种子是第一位的
我正在尝试理解这段代码
【参考方案1】:
因为您将两个流合并为一个。您将收到来自click$
或interval
的事件。在这些情况下,它们不是 Date 类型,因此您可以使用 getTime
方法。
scan
运算符允许在事件之间保持状态。 map
只是将输入转换为输出。在最后一个的情况下,您将收到事件本身...
【讨论】:
扫描算子在事件之间保持状态是什么意思 我假设 .startWith(new Date()) 发出一个日期对象,地图会接收它,所以 getTime 应该在 acc 上读取 是的,但它只适用于第一个事件......所以它会初始化扫描回调首先收到的值。 我假设代码将从 startwith 运算符开始执行,这将发出一个日期对象,该对象将转到 map 函数(实际上,为了便于理解,我替换了 scan 运算符而不是 map),因为它Date 类型,应该是 getTime() (但是有错误 can not read property) 以及合并现有主题 observable 和间隔的合并运算符(我假设间隔仅用于将其延迟到 5 秒),这将在第二次迭代时由 map 函数接收以上是关于Rxjs:扫描操作符的主要内容,如果未能解决你的问题,请参考以下文章