2016-12-15 3 views
0

アクションで2つのapiを呼び出そうとしています。 1つが完了したら、もう1つは最後のものを減速機に渡します。 私のgetAttendingは投稿と同時に呼び出されているように見えますが、投稿が完了した後ではありません。私はredux-thunkには新しく、完成したものを次々と呼び出すことができると思った。redux thunkが2つの異なるapiリクエストを呼び出す

export function postDeclined(id){ 
     let post = axios.post(blaBla.com); 
     let getAttending = axios.get(attending.com); 
     return (dispatch) => { 
      post.then(()=>{ 
       getAttending.then(({data})=>{ 
        dispatch({ 
         type: type.NOT_GOING, 
         payload: data.data 
        }); 
       }); 
      }); 
     } 
    } 

答えて

1

このようなAPI呼び出しをやってみてください。

export function postDeclined(id){ 
     return (dispatch) => { 
      axios.post(blaBla.com).then(()=>{ 
       axios.get(attending.com).then(({data})=>{ 
        dispatch({ 
         type: type.NOT_GOING, 
         payload: data.data 
        }); 
       }); 
      }); 
     } 
    } 

あなたは

1
...呼び出しは、あなたが実際にAPIを呼び出した...そう、それは非同期をしていた「と宣言」する場合

あなたのバーベル設定にasync/awaitを追加します。これらのものの読み込み/デバッグをもっと簡単にします。

+0

postDeclined =>(ID)=>非同期(派遣)=>のawaitからいくつかの方法で非同期(async)は何であるんを好みますか?またはラッパーチェーンメソッドの名前のみを指定します。 –

+0

asyncキーワードは、約束を返す関数を作成します。 awaitキーワードは、回線を同期呼び出しにし、約束が解決されるまで続行しません。 https://github.com/tc39/ecmascript-asyncawait –

+0

説明をありがとう、ありがとう。 –

0

コードサンプルによくある問題があります。この関数はすぐに2つのことを行います:apisの呼び出しを行い、アクションをディスパッチします。また、あなたがチェーンの約束は、あなたがその中間のコールバックは必要ありませんことを、予めご了承ください。

export const postDeclined = id => 
    axios.post(blaBla.com).then(axios.get(attending.com)); 

export const notifyNotGoing = dispatch => promisedResult => 
    promisedResult.then(({data}) => 
    dispatch({ 
     type: type.NOT_GOING, 
     payload: data.data 
    }) 
    ); 

をそして、あなたはそのようなあなたの関数を呼び出すことができます。

notifyNotGoing(dispatch)(postDeclined(2)) 

または組成物を使用したとカリー化(私は個人的にRamda

const prog = compose(notifyNotGoing(dispatch), postDeclined) 
prog(2) 
関連する問題