2017-11-25 14 views
0

현재 위치 ID 배열을 수신하는 관찰 가능 항목을 설정하려고 시도하고 있는데이 위치 정보를 한꺼번에 가져오고 모든 요청을 기다립니다. . 다음은 샘플입니다 :RX.JS Redux Observable Observable Multiple Request 동시에 요청하기

[ 
    { 
     id: "aoeuaeu", 
     name: "Test" 
    }, 
    ... 
] 

내가 지금 가지고있는 문제는 내가 요청 중 하나에 404를 얻을하고 모든 것을 망치는 것입니다 : 데이터처럼 보이는

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)) 

. RX를 배웠을 때 나는 아마 뭔가 잘못하고 있습니다. 어떤 도움이라도 좋을 것입니다!

+1

안녕하세요. 하나 이상의 요청이 어떤 식 으로든 실패하는 경우를 처리하려는 문제가 있습니까? 너는 무엇을하고 싶니? 모든 요청이 완료 될 때까지 기다려야합니까? 또한 서사시가 행동을 일으키지 않고 데이터 자체를 방출하는 것처럼 보이지 않습니다. 질문 또는 문제에서 누락 된 것입니까? – jayphelps

+0

@jayphelps, 나중에 전 서사시를 게시하지 않았습니다. 그 중 하나가 실패하면 나는 그것을 무시할 수 있습니다. 나는 각자에게서 사진의 명부를 얻을 것이기 때문에 모두를 돌려 보내기 위하여 기다리고 싶 그 (것)들을 그 때 분류하고 싶다. – Jonovono

답변

2

각 호출에 catch를 추가하고 하나의 요청이 실패 할 경우 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)) 
+0

화려 함! 감사 :) – Jonovono