定时刷新任务的写法

259 阅读1分钟

1.app.js文件的定时函数启动

class App extends React.Component {
    constructor() {
        super();
        this.state = {
            isInit: false,
        };
    }
    /**
     * 启动定时器
     */

    startInterval() {
        if (this.interval !== null) {
            clearInterval(this.interval);
            this.interval = null;
        }
        this.interval = setInterval(() => {
            // 执行刷新图片任务
            if (Data.updateTimes % 4 === 0) {
                _.each(Data.updatePictureTask, (task) => {
                    if (null !== task) {
                        task.call();
                    }
                })
            }
            // 执行刷新当前正在播放文件任务
            if (Data.updateTimes % 4 === 0) {
                _.each(Data.updatePlayBackTask, (task) => {
                    if (null !== task) {
                        task.call();
                    }
                })
            }
            // 执行服务器轮询任务 5s刷新一次
            if (Data.updateTimes % 5 === 0) {
                _.each(Data.YoutubeStatus, (task) => {
                    if (null !== task) {
                        task.call();
                    }
                })
            }
            // 切换通道状态 5s刷新一次
            if (Data.updateTimes % 5 === 0) {
                _.each(Data.BroadCastStatusToggle, (task) => {
                    if (null !== task) {
                        task.call();
                    }
                });
            }

            // 执行每秒更新NTP系统时间
            _.each(Data.NTPServerTimeTask, (task) => {
                if (null !== task) {
                    task.call();
                }
            });

            // 执行自动同步更新NTP系统时间
            if (Data.updateTimes % (Data.syncFrequency*60) === 0) {
                _.each(Data.NTPSyncTask, (task) => {
                    if (null !== task) {
                        task.call();
                    }
                });
            }
            Data.updateTimes++;
        }, 1000);
    }
 	componentDidMount() {
    	//请求数据成功
    	//开启定时器
        this.startInterval();
    }
     render() {
        const {isInit} = this.state;
        return isInit ? <Home/> : null;
    }
 }

2.Data.js规定定时任务

class Data {
    //是否一直刷新状态
    isContinueTask = true;

    updateTimes = null;

    updateUnitTask = {

        recordStatus: null,
        liveStatus: null,
        safetyRemoveStatus: null,
        OutputStatus: null
    };

    updatePictureTask = {
        status: null
    };

    LiveTask = {
        FacebookStatus: null,
        YoutubeStatus: null,
        YouTubeUpdateToken: null,

    };

    BroadCastStatusToggle = {
        YouTubeCheckBroadCastStatus: null,
        YouTubeCheckStreamStatus: null
    };

    updatePlayBackTask = {
        status: null
    };

    updateEasyToUseTask = {
        mode: null
    };

    NTPServerTimeTask = {
        systemTime: null,
    };

    NTPSyncTask = {
        reGetSystemTime: null,
    };

    // 同步频率(min)
    syncFrequency = 1;


const data = new Data();
Data.getInstance = () => data;
export default data;

3.任意组件中定时任务的实际业务定义

class FacebookAuth extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            data: props.data,
            access_token_facebook: "",
            token_expires_in: ""
        }
    }
 handleAuthStatus = () => {
        Data.LiveTask.FacebookStatus = () => {
            $.ajax({
                url: FacebookConfig.DEBUG ? "ajax/GetTokenFacebook.w" : FacebookConfig.FacebookURL.LoginStatus,
                type: FacebookConfig.DEBUG ? "Get" : "post",
                cors: true,
                data: {
                    access_token: FacebookConfig.YOUR_APP_ID + "|" + FacebookConfig.CLIENT_TOKEN,
                    code: this.state.data.device_code
                },
                success: (obj) => {
                    Data.LiveTask.FacebookStatus = null;
                    let data = FacebookConfig.DEBUG ? JSON.parse(obj) : obj;

                    if (typeof data !== "undefined") {
                        this.setState({
                            access_token_facebook: data['access_token'],
                            token_expires_in: data['expires_in']
                        });
                        //将token保存到后台
                        this.handleSaveNewTokenForServer();
                        //获取用户信息
                        this.HandleGetUserInformation();
                    }
                },
                error: (jqXHR, textStatus, errorThrown) => {
                    console.log(jqXHR.responseJSON.error);
                    console.log("https://graph.facebook.com/v2.6/device/login_status error");
                }
            });
        };
        Data.LiveTask.FacebookStatus(true);
    };
    }

export default FacebookAuth;