RX.JS Redux Observable同时有多个Get请求

时间:2017-11-25 04:27:25

标签: javascript rxjs rxjs5 redux-observable

我正在尝试设置一个observable,它当前接收一个位置ID数组,然后立即对所有这些进行get请求,并等待所有这些响应。这是一个示例:

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。任何帮助都会很棒!

1 个答案:

答案 0 :(得分:3)

您可以尝试向每个调用添加一个catch并返回一个带有错误消息的新observable,如果一个请求失败,这应该会阻止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))