在redux-thunk链中的最后一个函数之后运行一个函数

时间:2019-03-29 17:59:31

标签: javascript redux redux-thunk

我使用redux-thunk中间件来调度动作创建者,这些创建者返回函数,而函数本身会调度动作,例如

dispatch(doStuff())

function doStuff(){
    return dispatch => {
        dispatch(doMoreStuff());
        dispatch(doEvenMoreStuff());
        // etc.
    };
}

这里可能有异步的东西,但至少在开始时它会产生一个同步的动作“堆栈”。因此,用户单击一个按钮,将调度一个动作创建者,该动作创建者触发其他一系列动作。我的减速器可能连续被调用10次。我要做的是,一旦完成该操作及其所有直接后果,就在该链的末尾运行一些特定功能,并在该状态下生成应用程序状态。

一种懒惰的方法是将setTimeout用在包装我的减速器的东西中:

    let timeout;

    export default function(state, action) {
        const reduced = reducer(state, action);
        if (timeout) clearTimeout();
        timeout = setTimeout(() => doSomethingWithState(reduced), 0);
        return reduced;
    }

    function reducer(state, action) {
      // actual reducer
    }

但是,这看起来并不好,并且可能容易出错。最好的方法是什么,在每个动作“堆栈”结束时触发某物,而不是单个动作?

0 个答案:

没有答案