2017-11-17 13 views
0

reduxサンクを使用した非同期ディスパッチの正しいパターンですか?非同期ディスパッチの正しいパターン

//actions types 
const ADD_ARTIST = 'ADD_ARTIST' 

// action 
function AddArtist(val){ 
    return { 
    type: ADD_ARTIST, 
    payload:val 
    } 
} 


//some async events 
function async1(id){ 
    return fetch(.....) 
} 

function async2(id){ 
    return fetch(.....) 
} 

function async3(id){ 
    return fetch(.....) 
} 

function auth(id) { 
    return function (dispatch) { 
    async1(10).then((v) => dispatch(AddArtist(v))); 
    Promise.all([ 
     async2(26), 
     async3(51), 
    ]).then(
      (v) => dispatch(AddArtist(v[0] + v[1]) 
    )); 
    } 
} 


var ViewWrapper = connect(
    state => ({ 
    playlist: state.playlist, 
    artist: state.artist, 
    }), 
    dispatch => (
    { 
     dispatch, 
     auth: bindActionCreators(auth, dispatch) 
    }) 

)(View); 

とボタン:

<input type='button' onClick={() => 
this.props.dispatch(this.props.auth()) } value='dispatch mapDispatch>>>>>>>' /> 
+1

より良い方法を書くことができ、これは正しく見えます。エラー処理も必要です。 –

答えて

1

redux documentationによると、これは正常に見えるが、あなたはまた、エラー処理するためにいくつかのコードを適用します。

ここにあなたが[ドキュメント](https://redux.js.org/docs/advanced/AsyncActions.html)による

function auth(id) { 
    return ((dispatch) => async1(10) 
       ).then((v) => dispatch(AddArtist(v)) 
       ).then(() => 
       Promise.all([ 
        async2(26), 
        async3(51), 
       ]) 
      ).then((v) => dispatch(AddArtist(v[0] + v[1])) 
      ) 
    ) 
} 
+0

あなたの答えに感謝します – zloctb

関連する問題