我可以中止分派的操作中的thunk吗?
问题描述:
在thunk开始时,我发出一个'START'动作,然后我等待一些异步的东西,最后发送'SUCCESS'动作。我可以中止分派的操作中的thunk吗?
有时可能发生的情况是,在前一个结束(成功操作)之前再次调度此thunk,所以我希望第二个START操作被拒绝,并且thunk停止继续执行异步事件和END操作。
所以我的方法是检查中间件是否已经调度了一个调度的动作(之前的动作与当前相同),但是我无法弄清楚如何在“拒绝”动作之后从“很好'的方式。
目前我从中间件返回false,需要检查从调度返回的值。
export const doSomething =() => async (dispatch, getState) => {
if(!dispatch({type: 'START'})) return;
//...async stuff
dispatch({type: 'SUCCESS'});
}
有没有一种方法,我可以从一个点(中间件)控制呢?
答
我假设有一个减速器根据这些动作改变商店状态(START
,SUCCESS
,...)。
如果是这样,你必须决定派遣前检查商店状态:
export const doSomething =() => async (dispatch, getState) => {
if (getState().isLoading) return ; // <-- ⚠️ ⚠️ ⚠️
if(!dispatch({type: 'START'})) return;
//...async stuff
dispatch({type: 'SUCCESS'});
}
假设减速不喜欢的东西如下:
function (state = {}, action) {
if (action.type === 'START') {
return {...state , isLoading: true };
}
if (action.type === 'SUCCESS') {
return {...state , isLoading: false };
}
return state;
}