2017-10-14 55 views
0

在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'}); 
} 

有没有一种方法,我可以从一个点(中间件)控制呢?

回答

0

我假设有一个减速器根据这些动作改变商店状态(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; 
} 
相关问题