2016-06-01 139 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 }); 
    } 
}