【发布时间】:2016-07-12 20:52:06
【问题描述】:
我有一个异步操作
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。 store中item2的数据会被item1覆盖。
fetch('http://remote/items/item1'); //first
fetch('http://remote/items/item2'); // then
如何忽略 item1 的结果?或者我怎样才能让项目的调度总是在 item1 之后触发
我能想到的是,在发送请求之前调度 url。
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 中,我检查 url 以决定是否应该忽略响应。
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;
}
...
}
}
感谢您的帮助!
【问题讨论】:
标签: redux