本文实例讲述了JavaScript使用setInterval()函数实现简单轮询操作的方法。分享给大家供大家参考。具体分析如下:
概念:
轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出入”(Programmed I/O)。
setInterval是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。
由 setInterval 返回的ID值可用作 clearInterval 方法的参数。
提示: 1000 毫秒= 1 秒。
用法:
setInterval 动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象。可以使用本动作更新来自数据库的变量或更新时间显示。setInterval动作的语法格式如下:
setInterval(function,interval[,arg1,arg2,……argn])
setInterval(object,methodName,interval[,arg1,arg2,……argn])
语法:
具体实现:
附件批量下载实现示例:
/*轮询*/
sureToPigeonhole(data) {
this.deptName = data.deptName
this.categoryName = data.categoryName
this.tabless.filter(e => {
if (e.tableName == data.tableName) {
e.isDownload = '正在打包中...'
e.isDisplay = 'block'
e.isDisable = true
}
})
this.crud.refresh()
const tableName = data.tableName
const deptId = data.deptId
const values = {
deptId,
tableName
}
var _this = this
let a = 0
function increment(v) {
batchDownload(v).then(res => {
a++;
if (res.type == 'application/json') {
const reader = new FileReader();
reader.readAsText(res, 'utf-8');
reader.onload = function (e) {
let resul = JSON.parse(reader.result);
console.log("json", resul);
if (resul == 1) {
clearInterval(intervalId)
if (a == 1) {
_this.tabless.filter(e => {
if (e.tableName == data.tableName) {
e.isDownload = '附件批量下载'
e.isDisplay = 'none'
e.isDisable = false
}
})
} else {
_this.tabless.filter(e => {
if (e.tableName == data.tableName) {
e.isDownload = '附件正在下载'
e.isDisable = true
}
})
}
}
_this.crud.refresh()
}
}
if (res.type == 'application/zip') {
clearInterval(intervalId)
console.log("我进来了")
_this.export(res);
_this.tabless.filter(e => {
if (e.tableName == data.tableName) {
e.isDownload = '附件批量下载'
e.isDisplay = 'none'
e.isDisable = false
}
})
_this.crud.refresh()
}
}).catch(err => {
clearInterval(intervalId)
_this.tabless.filter(e => {
if (e.tableName == data.tableName) {
e.isDownload = '附件批量下载'
e.isDisplay = 'none'
e.isDisable = false
}
})
_this.crud.refresh()
});
}
var intervalId = setInterval(function () { increment(values) }, 1000)
},