next() 到中间 Observable
next() to intermediate Observable
我是 RxJS 的新手,所以我的术语可能不够简洁,抱歉。我使用 map() 创建了派生的 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”而不是对象,就好像 $button 将事件直接发送到 $source 而不是 $客户。为什么 $button.next(...) 发送到 $source 而不是发送到 $client?我期望一个操作员(map() 在这种情况下)产生新的流。我怎样才能实现一个本地循环,使其仍然依赖于原始流,但不修改原始流?提前致谢。
您看到的结果是预期的结果,而您想要达到的结果是不可能的。
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
我知道,这仅解释了行为,并没有提供 "solution" - 但是,要正确提供 解决 您的问题的良好答案,您应该写下你正在努力实现的目标 - 除非你只想了解为什么会这样。
此外:它当前的结构方式看起来确实过于复杂,我相信如果您提供一些有关用例的信息,这可以简化。
添加中间主题 ($anotherSource) 并将其与原始 $source 合并解决了问题:
//eternal values receive from server:
const $source = new Rx.Subject;
$source.subscribe( () => console.log( "Should not" ) );
const $anotherSource = new Rx.Subject;
//map from network representation:
const $client = $source.map( server => server.x + server.y ).merge( $anotherSource );
//display on screen:
$client.subscribe( client => console.log( "client:", client ) )
//have input to update client-side representation interleaving with server one:
const $button = new Rx.Subject;
$button.subscribe( $anotherSource );
$button.next( { x : 1, y : 2 } );
$client 现在收到对象而不是预期的“3”。
我是 RxJS 的新手,所以我的术语可能不够简洁,抱歉。我使用 map() 创建了派生的 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”而不是对象,就好像 $button 将事件直接发送到 $source 而不是 $客户。为什么 $button.next(...) 发送到 $source 而不是发送到 $client?我期望一个操作员(map() 在这种情况下)产生新的流。我怎样才能实现一个本地循环,使其仍然依赖于原始流,但不修改原始流?提前致谢。
您看到的结果是预期的结果,而您想要达到的结果是不可能的。
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
我知道,这仅解释了行为,并没有提供 "solution" - 但是,要正确提供 解决 您的问题的良好答案,您应该写下你正在努力实现的目标 - 除非你只想了解为什么会这样。
此外:它当前的结构方式看起来确实过于复杂,我相信如果您提供一些有关用例的信息,这可以简化。
添加中间主题 ($anotherSource) 并将其与原始 $source 合并解决了问题:
//eternal values receive from server:
const $source = new Rx.Subject;
$source.subscribe( () => console.log( "Should not" ) );
const $anotherSource = new Rx.Subject;
//map from network representation:
const $client = $source.map( server => server.x + server.y ).merge( $anotherSource );
//display on screen:
$client.subscribe( client => console.log( "client:", client ) )
//have input to update client-side representation interleaving with server one:
const $button = new Rx.Subject;
$button.subscribe( $anotherSource );
$button.next( { x : 1, y : 2 } );
$client 现在收到对象而不是预期的“3”。