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();
}
})
}
if (Data.updateTimes % 5 === 0) {
_.each(Data.YoutubeStatus, (task) => {
if (null !== task) {
task.call();
}
})
}
if (Data.updateTimes % 5 === 0) {
_.each(Data.BroadCastStatusToggle, (task) => {
if (null !== task) {
task.call();
}
});
}
_.each(Data.NTPServerTimeTask, (task) => {
if (null !== task) {
task.call();
}
});
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']
});
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;