我正在尝试设置一个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。任何帮助都会很棒!
答案 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))