emitWhenSomeSourceEmits

emitWhenSomeSourceEmits

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$)

09-18 00:41