const xSubject = new BehaviorSubject(undefined);
someSource$.subscribe(xSubject);
emitWhenSomeSourceEmits$.pipe(
concatMap(
(emission) => of(emission)
.pipe(
delayWhen(
() => someSource$.pipe(
filter(val => !!val),
...
tap(() => xSubject.next(undefined)),
),
);
),
);
期望:emitWhenSomeSourceEmits $的发射应延迟到someSource $发射新值之前。
如果我不使用BehaviorSubject,则如果someSource $在emitWhenSomeSourceEmits $之前发出,则后者的发出被错误地延迟到下一次发出。
如果我仅使用BehaviorSubject,则whenWhenWhenomeSourceEmits的第一个发射将与someSource计时。但是emitWhenSomeSourceEmits中的第二次发射将使用Behaved值并始终发射。
为了克服这个问题,我一直在xSubject上点击一个
undefined
,以使emitWhenSomeSourceEmits的下一个发射等待来自someSource的新值。有没有更好,更轻松的方式来做到这一点?
最佳答案
zip
运算符(https://rxjs-dev.firebaseapp.com/api/index/function/zip)听起来很完美,所以只需zip(someSource$, emitWhenSomeSourceEmits$)
。