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

RX.JS Redux Observable Multiple Get requests at same time

我正在尝试设置一个当前接收位置 ID 数组的可观察对象,然后立即对所有这些发出获取请求并等待对它们的响应。这是一个示例:

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

您可以尝试为每个调用添加一个 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))