RxJS. Вернуть в потоке параметр и результат.
Задача заключается в том, что необходимо получить как значение из исходного потока, так и резльтат его обработки в другом потоке. Допустим имеется исходный поток source и фукнция возвращая другой поток.
import { of, from, Observable } from "rxjs";
import { map, tap, mergeMap } from "rxjs/operators";
function getHash(value: string): Observable<number> {
return of(value.length);
}
const source = from(["Hello", "World"]);
Ожидаемый результат:
{ word: "Привет", hash: 6 }
{ word: "мир", hash: 3 }
Временная переменная
Примитивный подход
let tempWord: string = null;
source.pipe(
tap(word => (tempWord = word)),
mergeMap(word => getHash(word)),
map(hash => ({ word: tempWord, hash }))
);
forkJoin или zip
source.pipe(
mergeMap(word => forkJoin(of(word), getHash(word))),
map(([word, hash]) => ({ word, hash }))
);
Вложенная pipe
source.pipe(
mergeMap(word => getHash(word).pipe(
map(hash => ({ word, hash }))
))
);