繁体   English   中英

startWith()运算符是否将Observable变为ReplaySubject(1)?

[英]Does startWith() operator turns Observable into ReplaySubject(1)?

如果我希望订阅者最初至少获得X ,我可以将startWith(X)用于现有的Observable:

streamFromLibrary.startWith( X ).subscribe( myHandler );
//I want myHandler() to not wait until streamFromLibrary produce a value
//but be called instantly with X

还是仍然需要像这样通过中间ReplaySubject(1)进行传送?

let carrier = new Rx.ReplaySubject( 1 );
carrier.next( X );
streamFromLibrary.subscribe( value => carrier.next( value ) );
carrier.subscribe( myHandler );

否则,是否还有其他更优雅的方式将现有流中的值携带到具有至少一个初始/最后一个值的订阅中?

您不需要使用ReplaySubject ,但是您应该知道这两个并不相同:

  • startWith()运算符仅在每个观察者订阅时向其发出预设值。

  • ReplaySubject(1)类重新发出经过它的最后一项。 因此,它向每个观察者发出的第一个值可能会有所不同,具体取决于您推送到此Subject中的内容。

请注意,还有一个BehaviorSubject ,它将其初始值作为参数,然后在每次发射时都将其覆盖,因此它的工作方式与ReplaySubject(1)非常相似。

但是,有一个重要的区别。 BehaviorSubject收到complete通知时,它永远不会发出任何东西。 另一方面, ReplaySubject已收到complete通知,它也始终向每个观察者重播其缓冲区。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM