Вы можете использовать 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