2017-09-25 11 views
1

2つの観測値を順番に実行し、最初の観測値のみの結果を返します。 2番目の観測は、実行する前に最初に完了する必要があります。Rxjs連続して実行される2つの観測値の最初の結果を返します。

回避策が見つかりましたが、満足できません。よりよい解決策が存在するplunker test

const first = Observable.of(10).delay(1000).do(res => console.log('first')); 
const second = Observable.of(20).do(res => console.log('second')); 
console.log('start'); 
const test = first.concatMap(ev => second.map(x=> ev)).subscribe(res => 
console.log(res)); 

私は思いますが、私はそれを見つけることができない(と私は願っています!):あなたはここでそれをテストすることができます。 ご協力いただきありがとうございます。

+1

。唯一の改善点は、より明白にするために 'ev => second.mapTo(ev)'を使用することでした。 – martin

答えて

1

私のようなものを見ることを期待するので、私は内部的にそれは本当にあなたが投稿したものより何が違うのではない

const first = Observable.of(10).delay(1000).do(res => console.log('first')); 
const second = Observable.of(20).do(res => console.log('second')); 
const test = first.flatMap(rsp => { return second.mapTo(rsp); }); 

...私の頭の中でthenからflatMapを翻訳し、それは私にはより多くの意味になるだろう私がconcat操作について考え始めることはないので、直観的には。

更新:

私はあなたにも...

const test = first.delayWhen(() => second.mapTo(0)); 

を行うことができたとし...しかし、それは、より読みやすいかどうかはわかりません。 take(1)

+0

2つのエントリが動作しますが、私は 'second.mapToよりも清潔なものが好きです。 – Karine

+0

あなた自身の演算子や静的関数を書くことができます。それをbufferUntilまたはdelayUntilまたは何かと呼んでください。 – Pace

0

ユーザーmerge:私はこれを行うに任意のより良い方法はないと思う

Observable.merge(first, second).take(1).subscribe(x=>console.log(x)); 
+0

2番目の結果のみを返します。それは私が望むものではない – Karine

関連する問題