Я не знаю способа, который существует, однако мы можем попытаться что-то сделать. Давайте разделим наш основной наблюдаемый на два потока; один, который удовлетворяет наш предикат (т.е. x => x === 3
) и один, где значения не удовлетворяют этот предикат:
const item$ = Rx.Observable.range(0, 10);
const predicate = x => x === 3;
// Split our underlying stream into two Observables; one where each value
// will equal three, and the other where each value is not three.
const [ three$, notThree$ ] = item$.partition(predicate);
Мы можем сделать поток, который будет испускать, когда число 7 происходит:
const seven$ = notThree$.filter(x => x === 7);
Теперь, давайте сделаем два потока, чтобы представить нашу основную информацию, прежде чем 7 излучается и после
const beforeSeven$ = notThree$.takeUntil(seven$);
const afterSeven$ = notThree$.skipUntil(seven$);
и, наконец, мы можем объединить эти потоки для желаемого эффекта. Мы в основном CONCAT afterSeven $ и три $ потоков, как только наш beforeSeven $ поток заканчивается:
const result$ = beforeSeven$.concat(three$.merge(afterSeven$);
Вот jsfiddle что console.log
s результат: https://jsfiddle.net/cbelden/ppjmxww1/
Я думал о чем-то вроде этого! Спасибо, что опубликовали эти ответы. – franza