基于谓词的rxjs缓冲区
我想做一些我认为应该非常简单的事情,但是正确的rxjs操作符却让我难以理解 我想缓冲一个字符串的可观察对象,当可观察对象生成匹配字符串时刷新缓冲区。大概是这样的:基于谓词的rxjs缓冲区,rxjs,observable,buffer,Rxjs,Observable,Buffer,我想做一些我认为应该非常简单的事情,但是正确的rxjs操作符却让我难以理解 我想缓冲一个字符串的可观察对象,当可观察对象生成匹配字符串时刷新缓冲区。大概是这样的: obs.pipe(magicBuffer(x=>x===“匹配字符串”) …生成一组可观察的字符串数组 我能找到的所有缓冲区操作符似乎都是基于第二个可观察的,而不是原始源进行缓冲。您可以使用多播分割源可观察的,然后只缓冲,直到它发出匹配的字符串 这将按'x'字符分割源排放 import { of, Subject } from 'rx
obs.pipe(magicBuffer(x=>x===“匹配字符串”)
…生成一组可观察的字符串数组
我能找到的所有缓冲区操作符似乎都是基于第二个可观察的,而不是原始源进行缓冲。您可以使用
多播
分割源可观察的,然后只缓冲
,直到它发出匹配的字符串
这将按'x'
字符分割源排放
import { of, Subject } from 'rxjs';
import { filter, buffer, multicast } from 'rxjs/operators';
const source = of('a', 'b', 'c', 'x', 'd', 'x', 'e' , 'f', 'g', 'h', 'i', 'j', 'k', 'x', 'l', 'm');
source.pipe(
multicast(
() => new Subject(),
s => s.pipe(
filter(v => v !== 'x'),
buffer(s.pipe(filter(v => v === 'x'))),
)
)
).subscribe(x => console.log(x));
现场演示:如果我必须编写操作员,我会。写起来会很简单。但是我宁愿使用规范的方法来解决这个问题,如果有的话。