Могу ли я отслеживать значение при использовании конвейерных операторов? - PullRequest
0 голосов
/ 09 июля 2019

Есть ли способ отслеживать значение с помощью конвейерных операторов?

Чтобы дать реальный пример, скажем, что я хочу:
Над потоком данных S :

  1. Запоминание S текущие данные
  2. Создание HTTP-запроса
  3. Выполнение действий с ответом
  4. Создание другого HTTPзапрос с использованием результата операции
  5. Создание объекта, содержащего базу значений на 1. и ответ

Затем объедините их и используйте созданные мной объекты.

В основном,

const data = from([1, 2, 3]).pipe(
  // Memorize here
  map(a => req1(a)),
  flatMap(a => a),
  map(b => syncOp(b)),
  map(c => req2(c)),
  flatMap(d => d),
  map(e => ({id: _memorized_, value: e}))

merge(data).subscribe(f => console.log(f.id, f.value))

Связанный стек

Будем весьма благодарны за любые замечания.


Примечание: Если возможно, я бы предпочел не переносить значение, которое мне нужно, до конца путем создания объекта сверху.

1 Ответ

1 голос
/ 09 июля 2019

Вы можете легко сделать это, просто реструктурируя своих операторов и сделав memorized локальной переменной:

const data = from([1, 2, 3]).pipe(
  // Memorize here
  mergeMap(memorized => req1(memorized).pipe(
    flatMap(a => a),
    map(b => syncOp(b)),
    map(c => req2(c)),
    flatMap(d => d),
    map(e => ({id: memorized, value: e}))
  ));

merge(data).subscribe(f => console.log(f.id, f.value));
...