2016-10-26 3 views
3

첫 번째 관측 가능 항목이 비어있는 경우 (두 번째 관측 가능 항목을 기본적으로 호출하지 않음)에 따라 다른 두 관측 자료 중 하나를 반환하는 새 관측 가능 항목을 만드는 방법을 알고 싶습니다. 예를 들면 :조건부로 RxJS에서 관측 가능을 선택하십시오.

// 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;) 

신속하게 지금 작동하면 것인지 확인합니다.

doc에 따르면 isEmpty은 관찰 가능이 비어 있으면 참인 부울을 방출하므로이를 사용하여 원하는 관찰 가능 항목을 선택할 수 있습니다.

+1

'flatMap/mergeMap'이 아니어야합니까? – cartant

+0

그가''두 번째 관찰 가능 '을하지 말고''맵'이 적절한 것이라고 생각한다. 예제를 보면'flatMap'이 더 적절할 수도 있습니다. – user3743222

+0

네, 무슨 뜻인지 알 겠어요. 질문의 "기본적으로"사용은 해석에 개방적이다. – cartant

관련 문제