Javascript RxJS中是否有publishOnce类型的运算符?
期望值:emitWhenSomeSourceEmits$的排放应该延迟到someSource$发出新值 如果我不使用BehaviorSubject,那么如果某个源$在发射之前发射,而某个源发射$在发射之前发射,则后者的发射将错误地延迟到下一次发射 如果我只使用BehaviorSubject,emitWhenSomeSourceEmits的第一次发射将与someSource同步。但是emitWhenSomeSourceEmits的第二次发射将使用行为值并无论如何发射 为了克服这个问题,我一直在对xSubject点击一个Javascript RxJS中是否有publishOnce类型的运算符?,javascript,rxjs,Javascript,Rxjs,期望值:emitWhenSomeSourceEmits$的排放应该延迟到someSource$发出新值 如果我不使用BehaviorSubject,那么如果某个源$在发射之前发射,而某个源发射$在发射之前发射,则后者的发射将错误地延迟到下一次发射 如果我只使用BehaviorSubject,emitWhenSomeSourceEmits的第一次发射将与someSource同步。但是emitWhenSomeSourceEmits的第二次发射将使用行为值并无论如何发射 为了克服这个问题,我一直在对x
未定义的,这样当somesourceemits等待来自someSource的新值时,emits的下一次发射就会出现
有更好的非黑客方式吗?这个zip
操作符()听起来非常适合,所以只要zip(someSource$,emitWhenSomeSourceEmits$)
这个zip
操作符()听起来非常适合,所以只要zip(someSource$,emitWhenSomeSourceEmits$)
我想你可以使用这个操作符。举个例子bufferToggle(start$,end$)
将在“start$”发出值时开始收集值,并在end$
发出值时发出缓冲值。如果不需要可观察的start$
来决定何时开始收集值,则可以使用buffer
运算符。问题是end$可能在源$发出之前发出。我需要在排放量Whensomesourceemissions和somesourceemissions之间建立一个1:1的关系。我想你可以使用操作符。举个例子bufferToggle(start$,end$)
将在“start$”发出值时开始收集值,并在end$
发出值时发出缓冲值。如果不需要可观察的start$
来决定何时开始收集值,则可以使用buffer
运算符。问题是end$可能在源$发出之前发出。我需要在排放量之间有一个1:1的关系,当一些源排放量和一些源排放量。谢谢!太简单了!非常感谢。太简单了!
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)),
),
);
),
);