在调度中使用异步等待
问题描述:
我正在通过使调度异步来反应本地异步等待。如下所示使调度异步是否有任何问题或问题?它似乎工作(除了它是一个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))
}
}
}
答
这应该工作得很好(假设你的中间件有redux-thunk
)。我在几个React/Redux应用程序中使用了类似的方法(承诺而不是async
/await
)。
还有一个redux-promise
,但我觉得它不足以有两个原因:没有“开始”操作,也没有办法设置异步操作常需要的meta
。所以我更愿意按照你的代码那样明确地分派行为而不是承诺。
答
我用这个模式:
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 });
}
}