2017-11-25 24 views
0

現在、ロケーションIDの配列を受け取っているオブザーバブルを設定しようとしていますが、これらのすべてのリクエストを一度に取得して、すべてのレスポンスを待っています。ここではサンプルです:RX.JS Redux Observable複数の同時取得リクエスト同時に

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

私が今持っている問題は、私がリクエストの1に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

ありがとうございます。 1つ以上のリクエストが何らかの方法で失敗するケースを処理したいという問題はありますか?あなたは何をしたいですか?あなたは本当にすべてのリクエストが完了するのを待つ必要がありますか?それは、叙事詩が行動を起こしているのではなく、データそのものを放出しているようには見えません。それは質問や問題の省略ですか? – jayphelps

+0

@jayphelps、ya私は叙事詩全体を投稿しませんでした。それらの1つが失敗した場合、私はそれを無視することができます。私は理想的には、私はそれぞれの写真のリストを取得し、それらを並べ替えるしたいので、すべてが戻るのを待っています。 – Jonovono

答えて

2

各呼び出しにキャッチを追加し、エラーメッセージとともに新しい観測値を返すことができます.1つの要求が失敗した場合に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

関連する問題