Я пытаюсь настроить наблюдаемый, который в настоящее время получает массив идентификаторов местоположения, а затем делает запрос на получение всех этих данных сразу и ждет ответа для всех. Вот пример:
const fetchPhotosEpic = action$ =>
action$.ofType(LOCATIONS_RECEIVED)
.map(action => action.payload)
.mergeMap((data) => {
let promiseArray = data.map(location => Observable.fromPromise(axios.get(photosUrl(location.id))))
return Observable.forkJoin(
promiseArray
)
})
.map(responses => responses.map((response) => response.data.location))
Где данные выглядят так:
[
{
id: "aoeuaeu",
name: "Test"
},
...
]
Проблема, которую я сейчас имею, - я получаю 404 по одному из запросов, и это все испортит. Я, вероятно, что-то делаю неправильно, поскольку я просто изучаю RX. Любая помощь будет замечательной!
Вы можете попробовать добавить улов к каждому вызову и вернуть новое наблюдаемое сообщение об ошибке, которое должно остановить отказ forkJoin, если один запрос завершился с ошибкой. Затем вы можете либо отфильтровать сбои, либо добавить логику для обработки их в своем окончательном.map. например.
const fetchPhotosEpic = action$ =>
action$.ofType(LOCATIONS_RECEIVED)
.map(action => action.payload)
.mergeMap((data) => {
let promiseArray = data.map(location => {
return Observable.fromPromise(axios.get(photosUrl(location.id)))
.catch(error => Observable.of({error}))
})
return Observable.forkJoin(
promiseArray
)
})
.filter(response => !Boolean(response.error))
.map(responses => responses.map((response) => response.data.location))