2016-10-26 18 views
3

最初の観測値が空であれば(2番目の観測値をデフォルトで呼び出さずに)、2つの観測値のうちの1つを返す新しい観測値を作成する方法を知りたいと思います。例:条件付きでRxJSでobservableを選択する

// scenario 1 
 
let obs1 = Observable.empty(); 
 
let obs2 = Observable.of([1,2,3]); 
 
// This line doesn't work, but is essentially what I'm attempting to do 
 
let obs3 = (obs1.isEmpty()) ? obs2 : obs1; 
 
obs3.subscribe(i => console.log('Next: ', i)); 
 
// Next: 1 
 
// Next: 2 
 
// Next: 3 
 
// Complete 
 

 
// scenario 2 
 
let obs1 = Observable.of([6,7,8]); 
 
let obs2 = Observable.of([1,2,3]); 
 
// This line doesn't work, but is essentially what I'm attempting to do 
 
let obs3 = (obs1.isEmpty()) ? obs2 : obs1; 
 
obs3.subscribe(i => console.log('Next: ', i)); 
 
// Next: 6 
 
// Next: 7 
 
// Next: 8 
 
// Complete

答えて

1

あなたは試みることができる:それが動作するかどう

let obs3 = obs1.isEmpty().map(x => x? obs2 : obs1;) 

は今すぐにチェックします。 isEmptyはあなたが欲しい、観察を拾うためにそれを使用できるように観察が、空である場合にtrueとなるブール値を発するよう

うん、docによると、それは、問題ないはずです。

+1

「flatMap/mergeMap」にする必要はありませんか? – cartant

+0

彼は 'デフォルトで第2の観測可能性を呼び出さずに'と言ったので、 'map'が適切であると仮定します。例を挙げると、 'flatMap'がもっと適切かもしれません。 – user3743222

+0

はい、私はあなたが何を意味するかを見ます。質問の「デフォルトによる」の使用は解釈に開かれている。 – cartant