RxJS 5
Angular 2 RC4
アプリ:RxJS 5 Observableソースは、別のチェーンによって停止されますか? <code>Typescript 1.9</code>で書かれ
私はチェーンに2つの観測を持っています。私は条件が2番目に満たされれば、最初のものがすぐに完了するようにしたいと思います。私の努力は不必要に複雑なようです。ここで
source = Observable.interval(1000)
.do(()=>this.print("*******EMITTING from Source*******"))
.switchMap(count => {
if(count<3){ //just pass along the value
return Observable.create(observer=>{
observer.next(count);observer.complete()
})
}
else{ //abort by issuing a non-productive observable
return Observable.create(observer=>
observer.complete()
)
}
})
this.source.subscribe(count=>this.print('Ouput is '+count);
が出力されます:それは3つの値を放射された後、以下の例では、私が最初に観察を停止しよう
*******EMITTING from Source*******
Output is 0
*******EMITTING from Source*******
Output is 1
*******EMITTING from Source*******
Output is 2
*******EMITTING from Source*******
*******EMITTING from Source*******
*******EMITTING from Source*******
ので、機能的に、私は広いので、欲しい結果を得ますスクリプトは3つの出力後に通知を受け取るのを止めます。しかし、私は良い方法があると確信しています。私の問題は次のとおりです。
- 上流の観測は永遠に続きます。どうすればそれを止めることができますか?
- 私はすべての排出物についてチェーンの下に新しい観測値を作成しています。私はちょうど最初の3つの値を渡すことができますが、4日にチェーンを中止または完了することはできませんか?
チップをありがとう。 '.take()'はここで動作します(+1)。私はこれを単純な例として使った。私のより大きな質問は、(可能であれば)いくつかの状態に基づいて第2から第1観察可能なものを完成させる方法です。たとえば、チェーン内に2つのオブザーバブルがあり、最初のオブザーバブルが「真」を出すならば、すべての作業を中止したいと思う。多分 'takeUntil()'がやることでしょう – BeetleJuice
''チェーンの中の2つのオブザーバブル 'とはどういう意味ですか?おそらく 'takeXxx'演算子はあなたが推測するようにあなたを助けるでしょう。 ところでこの記事は 'takeXxx'演算子についての私の目玉でした。 https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87#.tkmznu7ho –
私のOPはチェーン内に2つの観測値を持っています( 'switchMap'は2番目を出力します)。私はちょうどその中からストリームを殺す/完了する方法を探しています、そして、私はオペレーターがそれを私にさせるでしょう。あなたがリンクした記事を読んでみましょう。 – BeetleJuice