Как использовать несколько ответов flatMap в операторе карты в разных функциях? - PullRequest
0 голосов
/ 30 марта 2020

Я пытался найти способ объединить несколько операций внутри функции карты, полученной из предыдущего оператора flatMap.

Текущая функциональность:

flatMap(
  someResponse=> combineLatest([
    this.locator.function(someResponse, variable2),
    this.function1(someResponse),
  ])
),
map(([response1, response2]) => this.function3(response1, response2));

Требуемая новая функциональность это:

flatMap(someResponse =>
  combineLatest([
    this.locator.function(someResponse, variable2),
    this.function1(someResponse),
    this.locator.function2(someResponse, variable3)
  ])
),
map(([response1, response2, response3]) => {
  this.function3(response1, response2);
  this.function4(response3);
})

Я пробовал другую карту, но она получает ответ предыдущей карты, а не flatMap. Я не совсем уверен в том, как работает каждый из этих операторов. Такие как switchMap, contactMap, mergeMap и др. c. Я не мог найти способ сделать это.

Я связал и скомбинировал 3 функции в flatMap, а затем хочу использовать ответы для выполнения некоторых других операций.

Как я могу это сделать?

1 Ответ

0 голосов
/ 30 марта 2020

Возможно, есть другое элегантное решение. Но в настоящее время должно работать следующее решение:

В первом сценарии вы возвращаете массив, возвращенный this.function3(response1, response2). Потому что функции стрелок без фигурных скобок фактически переводят в функцию с оператором возврата. Например, map((...) => function(...)) похоже на запись map((...) => { return function(...)) }.

Итак, во втором сценарии создайте объект и pu sh массивы, возвращаемые обеими функциями. Затем верните объект.

flatMap(someResponse =>
  combineLatest([
    this.locator.function(someResponse, variable2),
    this.function1(someResponse),
    this.locator.function2(someResponse, variable3)
  ])
),
map(([response1, response2, response3]) => {
  return {
    'result1': this.function3(response1, response2),
    'result2': this.function4(response3)
  }
})

Затем, когда вы подпишетесь на наблюдаемое, к массивам из функций 1 и 2 можно получить доступ response.result1 и response.result2 соответственно.

...