3
我有一个异步操作如何正确处理异步操作?
function fetch(url) {
dispatch => {
request(url).then(
resp => dispatch({type: FETCH_SUCCESS, resp}),
error => dispatch({type: FETCH_FALUIRE, error})
);
}}
UI有一个页面,列出所有的项目,当点击其中一个,这将分派与该项目的URL一个动作。
当我先点击item1时,如果item2的响应早于item1返回,我会快速点击item2。商店中item2的数据将被item1覆盖。
fetch('http://remote/items/item1'); //first
fetch('http://remote/items/item2'); // then
如何忽略item1的结果?或者我怎样才能使项目的发送总是在项目后触发1
我能想到的是,在发送请求之前调度网址。
function fetch(url) {
dispatch => {
dispatch({type: FETCH_START, url});
request(url).then(
resp => dispatch({type: FETCH_SUCCESS, resp, url}),
error => dispatch({type: FETCH_FALUIRE, error, url})
);
}
}
在reducer中,我检查网址以决定是否应该忽略响应。
function reduceFetch(state = initialState, action) {
switch(action.type) {
case FETCH_START:
return {initialState, action.url};
case FETCH_SUCCESS:
if (state.uri === action.url) {
return {state, resp: action.resp};
} else {
return state;
}
...
}
}
感谢您的帮助!
感谢Tarabanko,这是我的想法,但不知道如何实施。 – level55