基于谓词的rxjs缓冲区

时间:2019-02-06 19:31:32

标签: rxjs observable buffer

我想做一些 应该很简单的事情,但是正确的rxjs运算符使我难以理解。

我想缓冲可观察的字符串,当可观察的字符串产生匹配的字符串时,刷新缓冲区。像这样:

obs.pipe(magicBuffer(x => x === 'matching string'))

...产生可观察到的字符串数组。

我可以找到的所有缓冲区运算符似乎都是基于第二个可观察的缓冲区,而不是原始源。

1 个答案:

答案 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));

实时演示:https://stackblitz.com/edit/rxjs-jad7ez