javascript - next() 到中间 Observable

标签 javascript rxjs reactive-programming rxjs5

我是 RxJS 新手,所以我的术语可能不够简洁,抱歉。我使用 ma​​p() 创建了派生的 Observable,并希望它继续通过自身传递其源值以及在此之上的其他事件。例如:

//receiving values from server:
const $source = new Rx.Subject;

//map from network representation to client one:
const $client = $source.map( server => server.x + server.y );
//display on screen:
$client.subscribe( client => console.log( "client:", client ) )

//have input to update client-side representation:
const $button = new Rx.Subject;
$button.subscribe( $client );

$button.next( { x : 1, y : 2 } );

遗憾的是,它打印“3”而不是 Object,就好像 $button 将事件直接发送到 $source 而不是 $client 一样。为什么 $button.next(...) 发送到 $source 而不是发送到 $client?我期望一个运算符(在本例中为ma​​p())生成新流。如何实现本地循环,使其仍然依赖于原始流,但不修改原始流?提前致谢。

最佳答案

您所看到的结果是预期的,而您想要实现的结果是不可能的。

I expected an operator (map() in this case) to spawn new stream.

这是正确的,但是新生成的流是 source$ 的扩展,因此:

$client = $source + map
// this means any data injected into client$
// will walk through an instance of source$ and then through the map-function

我知道,这仅解释了行为,并没有提供“解决方案” - 但是,为了正确提供解决您的问题的良好答案,您应该写一些有关您正在尝试的内容实现 - 除非您只想了解为什么会这样。

另外:它当前的结构方式看起来确实过于复杂,我相信如果您提供有关用例的一些信息,这可以简化。

关于javascript - next() 到中间 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45394118/

相关文章:

rxjs - 从 Observable 复制到 Observer

listview - Flutter ListView不会使用setState()刷新UI,尽管itemCount和附加列表已正确更新

java - RxJava 2.x : Should I use Flowable or Single/Completable?

javascript - 三个js改变一个饼图切片的位置

javascript - 如何使用 angularJS 将所​​有日期从 UTC 转换为本地时间?

javascript - 单击单选按钮应自动定位到页面顶部

javascript - 订阅数组更改

javascript - 带功能节点和继电器的节点-红色温度传感器

javascript - 错误 TS2339 : Property 'map' does not exist on type 'Observable<Response>'

java - RxJava Observable 出错时继续并获取状态