我可以从派遣的行动中止一个thunk吗?

时间:2017-10-14 20:55:07

标签: javascript redux redux-thunk

在thunk的开头,我发出了一个“开始”字样。行动,然后我等待一些异步的东西,最后派出一个成功的'成功'成功动作。

有时可能会发生这个thunk在前一个结束之前再次被调度(成功动作),所以我希望第二个START动作被拒绝,并且thunk停止继续执行async stuff和END动作。

所以我的方法是检查中间件是否已经调度了调度的操作(之前的操作与当前操作相同),但我无法弄清楚如何在&#中拒绝操作之后立即从thunk返回39,漂亮的'方式。

目前我从中间件返回false,需要从dispatch中检查返回的值。

export const doSomething = () => async (dispatch, getState) => {

    if(!dispatch({type: 'START'})) return;

    //...async stuff

    dispatch({type: 'SUCCESS'});
}

有没有办法从一点(中间件)控制这个?

1 个答案:

答案 0 :(得分:0)

我假设有一个reducer根据这些操作(STARTSUCCESS,...)更改存储状态。

如果是这样,您必须在决定发送之前检查商店状态:

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;
}