2016-06-01 175 views
2

我正在通過使調度異步來反應本地異步等待。如下所示使調度異步是否有任何問題或問題?它似乎工作(除了它是一個polyfill)。如果這種方法沒有任何問題,我認爲它可以用於反應原生。在調度中使用異步等待

export function fetchData(date, lng, lat){ 
    const {year, month} = date; 
    return async(dispatch) => { 
    dispatch(requestData()) 
    try { 
     const data = await request(`http://data.police.uk/api/crimes-street/all-crime?lat=${lat}&lng=${lng}&date=${year}-${month}`) 
     dispatch(recieveData(data)) 
    } catch (err) { 
     dispatch(requestError(err)) 
    } 
    } 
} 

回答

2

這應該工作得很好(假設你的中間件有redux-thunk)。我在幾個React/Redux應用程序中使用了類似的方法(承諾而不是async/await)。

還有一個redux-promise,但我覺得它不足以有兩個原因:沒有「開始」操作,也沒有辦法設置異步操作常需要的meta。所以我更願意按照你的代碼那樣明確地分派行爲而不是承諾。

1

我用這個模式:

const result = (res) => { 
     if (!res.result) { 
      this.setState({ 
      ...this.state, 
      Valid: false 
      }); 
     } 
     }; 


AsyncFn(this.props.dispatch, field , result); 



export async function AsyncFn(dispatch, field, Callback) { 
    try { 
    const response = await (
     request.post(url) 
    ); 

    if (response && response.body) { 
     if (response.body.result) { 
     dispatch(Auth()); 
     dispatch(openModal()); 
     } else { 
     Callback(response.body); 
     } 
    } else { 
     Callback({ result: false, message: 'Not valid' }); 
    } 
    } catch (err) { 
    Callback({ result: false, message: err.message }); 
    } 
}