2017-07-14 11 views
-1

データを取得して後で使用するためにReduxストアに配置する必要があるReact-Redux Webアプリケーションがあります。私はデータを取得する関数を呼び出しますが、関数は応答を設定する前に戻り、アクションは未定義としてストアに送られます。 下記の私の仕事:応答を実行する上で動作しませんでしたレスポンスの前にAPI非同期呼び出しが返される

function getFoo() 
{ 
    return fetch(url, { 
     headers: { 
     'Content-Type': 'application/json' 
     }, 
     method: 'post', 
     body: JSON.stringify(
      { 
       "foo":{}, 
       "bar":{} 
      } 
     ) 
    }).then((resp) => resp.json()) 
     .then(function(data){ 
      return data 
     }) 

} 

export const fooAction=() => { 

return { 
    type:'STORE_FOO', 
    result:getFoo() 
}; 
} 

は、それが[約束] [オブジェクト]返されました。

同じことがあまりにもこの関数で起こった:

async function getFoo() { 

    try { 
     let response = await fetch(url, { 
            headers: { 
             'Content-Type': 'application/json' 
            }, 
            method: 'post', 
            body: JSON.stringify(
             { 
              "foo":{}, 
              "bar":{} 
             } 
            ), 
           }); 
     let data= await response.json() 
     return await data; 
    } catch (e) { 
     return e.message; 
    } 
} 

は、どのように私は私の行動を続行する前に、実際の応答値、JSONオブジェクトを取得することができますか?

答えて

0

まず、react-reduxアプリで非同期呼び出しを処理するには、redux-thunkをミドルウェアとして使用する必要があります。

また、アクション関数は、オブジェクトを返すだけでなく、アクションをディスパッチする必要があります。

export const fooAction =() => { 
    return dispatch => { 
    dispatch(
    type:'STORE_FOO', 
    result:getFoo() 
    }); 
}; 
} 
+0

私が反応し、Reduxのために使用される取得しようとしています、私は、容器の.jsファイルで私のディスパッチ関数を適用: 'constのmapDispatchToProps =(派遣)=> { \tリターン{ \t \t onFoo:() ( 'onFoo関数はhtml onSubmitアクションから来ています) – bosada

+0

http://redux.js.org /docs/advanced/AsyncActions.html この記事を一回読めば、非同期アクションを作成する方法の基本的な理解が得られます。 –

関連する問題