Передайте наблюдаемую информацию, чтобы обновить список элементов с результатом из API - PullRequest
0 голосов
/ 29 марта 2020

У меня есть наблюдаемая , которая качает список предметов. Мне нужно pipe наблюдаемого, чтобы каждый из элементов выполнял вызов API, обновлялся сам с результатом вызова API и, наконец, предоставлял обновленный список элементов из наблюдаемого.

  • Рассмотрим массив, как показано ниже
    [{id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 3, name: 'c'}]

  • Каждый элемент должен выполнить вызов API, который возвращает значение «новый» или «старый» item
    GET /api/type/:id возвращает new / old

  • Обновите элемент, чтобы получить значение результата API для нового type свойства

  • Вернуть обновленный список
    [{id: 1, name: 'a', type: 'new'}, {id: 2, name: 'b', type: 'old'}, {id: 3, name: 'c', type: 'new'}]

Какие операторы rxjs можно использовать для этого?

1 Ответ

1 голос
/ 29 марта 2020

Если вы согласны делать это последовательно, вы можете попробовать что-то вроде этого

const items$ = from([{id: 1, name: 'a'}, {id: 2, name: 'b'}, {id: 3, name: 'c'}])

const request = async (data) => {
  // data here would be any single object in your array
  // and `doHttpRequest` is any function that returns the type
  // given the original object
  const type = await doHttpRequest(data)
  return {
    ...data,
    type
  }
}

const results$ = items$.pipe(
  // flatMap being used here since we're not returning
  // a synchronous value from request
  flatMap(request),
  toArray()
);

// somewhere else in your code
results$.subscribe(value => console.log(value));

Если вы пропустите часть toArray, вы можете оставить свой наблюдаемый в виде потока объектов вместо одного массива. завершение в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...