2017-09-25 10 views
1

순차적으로 두 개의 관측 값을 실행하고 첫 번째 관측 값의 결과 만 반환해야합니다. 두 번째 관측 대상은 실행하기 전에 먼저 완료해야합니다.Rxjs 순차적으로 실행되는 두 관측 값의 첫 번째 결과를 반환합니다.

해결 방법을 찾았지만 만족스럽지 않습니다. 더 좋은 솔루션이 존재 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

두 항목이 작동하지만'second.mapTo'보다 깨끗한 것을 원합니다 – Karine

+0

당신은 항상 자신의 연산자 또는 정적 함수를 작성할 수 있습니다. 그것을 bufferUntil 또는 delayUntil 또는 무엇이라 부릅니다. – Pace

0

사용자 merge :이 작업을 수행하는 더 좋은 방법이 생각하지 않습니다

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

두 번째 결과 만 반환합니다. 내가 원하는 건 아니야. – Karine