一、需求
有个页面需要前端轮询接口,这种情况下肯定会考虑到定时器:进入页面时,开启定时器,切换路由时清理定时器,所以可以用dva中的subscriptions(https://dvajs.com/api/#reducers)来处理,但是,我们的需求是:根据接口中的某个字段判断是否要启动定时器,而这个接口和定时器执行的接口是同一个。此时,经过研究,决定使用单例模式创建一个定时器,这样既能保证定时器唯一,也能动态控制定时器(启动和清理)
二、代码与使用
思路一:闭包+子执行函数:
export default (function() {
let unique: any = null;
return {
clearTimer: function() {
if (unique) {
clearInterval(unique);
unique = null;
}
},
getTimer: function(dispatch?: any, type?: string) {
if (unique === null && dispatch && type) {
unique = setInterval(() => {
console.log('--------------定时器执行中----------');
// 执行逻辑