Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RxJS中是否有publishOnce类型的运算符?_Javascript_Rxjs - Fatal编程技术网

Javascript RxJS中是否有publishOnce类型的运算符?

Javascript RxJS中是否有publishOnce类型的运算符?,javascript,rxjs,Javascript,Rxjs,期望值:emitWhenSomeSourceEmits$的排放应该延迟到someSource$发出新值 如果我不使用BehaviorSubject,那么如果某个源$在发射之前发射,而某个源发射$在发射之前发射,则后者的发射将错误地延迟到下一次发射 如果我只使用BehaviorSubject,emitWhenSomeSourceEmits的第一次发射将与someSource同步。但是emitWhenSomeSourceEmits的第二次发射将使用行为值并无论如何发射 为了克服这个问题,我一直在对x

期望值:emitWhenSomeSourceEmits$的排放应该延迟到someSource$发出新值

如果我不使用BehaviorSubject,那么如果某个源$在发射之前发射,而某个源发射$在发射之前发射,则后者的发射将错误地延迟到下一次发射

如果我只使用BehaviorSubject,emitWhenSomeSourceEmits的第一次发射将与someSource同步。但是emitWhenSomeSourceEmits的第二次发射将使用行为值并无论如何发射

为了克服这个问题,我一直在对xSubject点击一个
未定义的
,这样当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)),
            ),
        );
  ),
);