我想做一些 应该很简单的事情,但是正确的rxjs运算符使我难以理解。
我想缓冲可观察的字符串,当可观察的字符串产生匹配的字符串时,刷新缓冲区。像这样:
obs.pipe(magicBuffer(x => x === 'matching string'))
...产生可观察到的字符串数组。
我可以找到的所有缓冲区运算符似乎都是基于第二个可观察的缓冲区,而不是原始源。
答案 0 :(得分:2)
您可以使用multicast
拆分源Observable,然后仅buffer
直到发出匹配的字符串。
这将按'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));