我正在寻找一种缓冲可观察值的方法,直到发出其他一些可观察值,然后再发出所有先前的值。类似skipUntil之类的东西,如果skipUntil也会在发出第二个可观察值时立即发出跳过的值。
--a--b----c-----d---e--- (source)
-----------1------------- (other1)
------------abc-d---e----(desired output)
答案 0 :(得分:0)
您可以使用bufferWhen:
import { fromEvent, interval } from 'rxjs';
import { bufferWhen } from 'rxjs/operators';
const clicks = fromEvent(document, 'click');
const buffered = clicks.pipe(bufferWhen(() =>
interval(1000 + Math.random() * 4000)
));
buffered.subscribe(x => console.log(x));
答案 1 :(得分:0)
这是我想到的自定义运算符。不确定是否可以通过更漂亮的方式完成。
export function bufferUntil(stopBufferSignal: Observable<any>) {
return <T>(source: Observable<T>): Observable<T> => {
return source.pipe(buffer(stopBufferSignal),
take(1),
flatMap(ar => {
const sourceWithNSkipped$: Observable<T> = source.pipe(skip(ar.length));
const bufferedItems$: Observable<T> = from(ar);
return bufferedItems$.pipe(concat(sourceWithNSkipped$))
}));
}
}