3
두 개의 독립적 인 Observable이 있는데, 첫 번째 값을 내릴 때마다 두 번째 값을 내야하는 방식으로 결합하고 싶습니다.사슬 관측 가능한 배출량?
이 시나리오에서 첫번째 Observable은 가변 콜백 타이밍 (delay
또는 timer
의 사용이 허용되지 않음)이있는 비동기 Node.js 스타일의 메서드를 기반으로하는 무한 시퀀스입니다. 두 번째 Observable은 독립적 인 값의 유한 순서입니다.
I: ---A--D-----Q-G---B-> (I is infinite)
F: -3512-|-> (F is finite)
O: ---3--5-----1-2-|-> (O is finite)
출력 시퀀스 (O)는 (I)의 타이밍에 기초하여의 값 (F)로 한정된다.
은 여기 (I) :
// I'm stuck with this, it cannot change...
function asyncOperation(callback) {
const delayMsec = Math.floor(Math.random() * 1000);
timers.setTimeout(callback, delayMsec, null, delayMsec);
}
const callbackObservable = Rx.Observable.bindNodeCallback(asyncOperation);
const infiniteCallbackSequence = Rx.Observable
.defer(callbackObservable)
.expand(x => callbackObservable());
그리고 편의를 위해
, 여기 (F) :const finiteSequence = Rx.Observable.from([3, 5, 1, 2]);
I 돈 (내 here의 이전 질문에 따라이 빌드.) combine*
, merge*
또는 *map
이 내가 원하는 것을 생성 할 수 있도록 충분히 잘 이해하고 있습니다. 그것은 (O)가 방출 될 때마다 (I)에 take(1)
을 원하는 것처럼 보입니다.
설명 된 동작을 어떻게 얻을 수 있습니까?
은'|'그것이 정상입니다, I''에서 이벤트를 일치하지 않는 것? – njzk2
죄송합니다. @ njzk2. 이러한 파이프 기호는 단순히 "end of sequence"를 나타냅니다. 주 RxJS 문서의 대리석 다이어그램은 'X'를 사용하여 그러한 것을 나타낼 것이라고 생각하지만 위의 ASCII 다이어그램에서 더 혼란스러워 보였습니다. –