Я ищу способ отследить значение 'route' среди потоковых операторов.У меня есть материализованный поток с дополнительными метаданными об объекте уведомления (например, свойство valueId
).Это определение будет выглядеть примерно так:
const x = stream.pipe(
materialize(),
map(x => Object.assign(x, {valueId: randomInt()}))
);
Теперь мне нужно обернуть операторы, которые применяются к x
.Допустим, мне нужно использовать map(x => x * 2)
, но я не могу сделать это так:
x.pipe(dematerialize(), map(x => x * 2))
Потому что я потеряю свои метаданные.Как мне сделать функцию обтекания, которая будет применяться к любому оператору и все равно сохранит мои дополнительные метаданные?
x.pipe(wrap(map(x => x * 2)))
Я думал о чем-то вроде этого:
function wrap<T, R>(
operator: OperatorFunction<T, R>
): (source: Observable<TaggedValue<T>>) => Observable<TaggedValue<R>> {
return source =>
source.pipe(
switchMap(x =>
of(x).pipe(
dematerialize(),
operator,
materialize(),
map(z => Object.assign(z, { valueId: x.valueId }))
)
)
);
}
Но он генерируетподдельные полные сообщения от of()
.Образец: https://stackblitz.com/edit/rxjs-fhv54p