2017-11-01 9 views
0

これは私のアクションクリエータコールです - 問題があります - 最初のAPIコールからデータを取得していますが、マップしていくつかのコールケース)それは次の呼び出しを呼び出すところまで戻りません。ここで私のコードで何が問題になっていますか?マッピングAPIレスポンス - 後続のAPI呼び出しを返してディスパッチしません。

export function getData() { 
     return async function getData(dispatch) { 
     const { data } = await getDataAPI(); 
     dispatch({ type: GET_DATA, payload: data }); 
     Object.keys(data).map(async (keyName, keyIndex) => { 
      const ENDPOINT = 'build the url with keyName'; 
      getSingleDATA(ENDPOINT); 
     }); 
     }; 
    } 

    async function getDataAPI() { 
     const endpoint = 'url'; 
     return Request.get(endpoint); 
    } 

    async function getSingleDATA(ENDPOINT) { 
     //CODE DOES NOT GO TO THE LINE BELOW 
     return function dispatchgetSingleDATA(dispatch) { 
     Request.get(ENDPOINT).then((response) => { 
      dispatch({ type: GET_SINGLEDATA + keyIndex, payload: response }); 
     }); 
     }; 
    } 

答えて

0

私はあなたのgetSingleDATA()関数はカリー化だと思う、あなたは(あなたがそれdispatchを渡すために期待されている)返された関数を呼び出していません。私はそれがこのように読むべきだと思います:

... 
Object.keys(data).map(async (keyName, keyIndex) => { 
    const ENDPOINT = 'build the url with keyName'; 
    getSingleDATA(ENDPOINT)(dispatch); 
}); 

第2に、あなたはそれをカレーする必要がありますか?あなたはこのように見えるためにあなたのgetSingleDATA()機能を書き換えることができますようにそれは私になります

async function getSingleDATA(ENDPOINT, dispatch) { 
    return Request.get(ENDPOINT).then((response) => { 
    dispatch({ type: GET_SINGLEDATA + keyIndex, payload: response }); 
    }); 
} 

を...そして上記(から2番目の引数としてdispatchに渡しgetSingleDATA()がとても良く、keyIndexを使用する予定のようにも見えますそれにも合格してください):

getSingleDATA(ENDPOINT, dispatch); //don't forget keyIndex (not shown) 

うまくいけば助けてください。それと幸運!

関連する問題