2015-07-21 35 views
13

如何/在哪里可以定期调度操作?使用递归setTimeout进行倒计时。如何使用setTimeout和调度程序以redux触发周期性操作

从例如采取类似的措施:

// Can also be async if you return a function 
export function incrementAsync() { 
    return dispatch => { 
    (function _r() { 
     setTimeout(() => { 
     // Yay! Can invoke sync or async actions with `dispatch` 
     dispatch(increment()); 
     _r(); 
     }, 1000); 
    })(); 
    }; 
} 

所以这是一个好主意,或者有更好的办法解决这个问题,喜欢用中间件或从其他地方创造的行动?

我更喜欢这种通用版本,我可以通过商店控制计时器的启动/停止。

我设置一个样本实现,请看看https://gist.github.com/eguneys/7023a114558b92fdd25e

+0

因为这确实有效,所以我可能不会重新创建一个总是看​​起来一样的函数,而是定义一次。 –

+0

你试过setInterval吗?真的不明白你的增量是什么异步。请记住,js事件处理不是很精确 – softwarenewbie7331

回答

14

你的建议是罚款的办法,虽然有点令人费解。通常,我会在组件生命周期方法中设置时间间隔(例如,componentDidMount/componentWillUnmount),并避免在其他操作中设置时间间隔。

如果您绝对需要这种灵活性,更好的选择是使用Rx作为异步管理,并使用dispatch可观察链最后的动作。通过这种方式,您可以使用Redux照亮(同步更新)并将异步组合保留为Rx。

相关问题