2017-11-04 8 views
1

RxJS 5의 관측 가능 연산자 withLatestFrom에 대한 문서는 상호 의존성 관측 값 (즉, 관측 값의 다이아몬드 패턴)이 어떻게 작동하는지에 대해 명확하지 않은 것으로 보입니다.Observables의 다이아몬드 패턴에서`withLatestFrom`은 무엇을 보장합니까?

제 질문은 Rxjs - Subscribing to interdependent observables과 매우 유사합니다. 간단한 설명은 다음과

  • 는 X A.
  • Y는 withLatestFrom 방법을 통해과 X에 의존
  • 에 따라 달라

    I 세 관찰 가능한는 A, X 및 Y. 그들은되도록 구성되어있다. 코드에서

, 이것은 다음과 같습니다

let a$ = Rx.Observable.interval(...) 

let x$ = a$.map(...) 

let y$ = a$.withLatestFrom(x$).subscribe((a, x) => { 
    console.log("a = " + a) 
    console.log("x = " + x) 
}) 

내가 y$에 가입한다면 내 질문은, 내가 x$의 최신 값을 갖도록 보장 할 것입니까?

그것은이 하드 보장이 위의 링크 된 질문에서 나의 이해입니다 : a$에 이벤트가있을 때마다, x$ 먼저 평가됩니다 다음 y$x$의 새 값을 사용하여 평가됩니다. 그러나 RxJS 설명서가이 문제에 대해 명확하지 않다고 생각합니다.

withLatestFrom은 내가 예상 한대로 작동합니까?

기본 (즉시) 스케줄러와

답변

0

, 당신이 기대하는 것처럼 단지 작동 그러나

const a$ = Rx.Observable.interval(1000) 
 

 
const x$ = a$.map(x => x + 1) 
 

 
const sub = a$.withLatestFrom(x$).take(3).subscribe(([a, x]) => { 
 
    console.log("a = " + a) 
 
    console.log("x = " + x) 
 
})
<script src="https://unpkg.com/[email protected]/bundles/Rx.min.js"></script>

, x$가 다른 스케줄러에있는 경우, 당신은 "이상한"행동으로 실행 (첫 번째 값을 표시하는 데 2 ​​초가 걸리는 것을 확인하고 0은 건너 뜁니다).

편집 : 흥미롭게도, rxjs

const a$ = Rx.Observable.interval(1000) 
 

 
const x$ = a$.map(x => x + 1).delay(1) 
 

 
const sub = a$.withLatestFrom(x$).take(3).subscribe(([a, x]) => { 
 
    console.log("a = " + a) 
 
    console.log("x = " + x) 
 
})
<script src="https://unpkg.com/[email protected]/bundles/Rx.min.js"></script>

(하지만 그 효과에 의존하지 것이다) 작은 차이를 "용서"와 이후 a = 2에서 올바른 값을 결합