周期调用的方法是setInterval(),接受的第一个参数是要调用的函数或要执行的代码串。,第二个参数是周期性执行或调用 code 之间的时间间隔,以毫秒计。
调用setInterval()方法同样会返回一个ID,该ID可用于在将来某个时刻取消周期调用。取消周期调用的重要性要远远高于取消超时(setTimeout)调用,因为在不加干涉的情况下,周期调用将会一直执行到页面卸载。
let timer = setInterval(function () {
$.get(`${serverUrl}/api/findById/${id}`, function (data) {
if (data.success) {
if (parseInt(data.result.value) == parseInt(expectValue)) {
clearInterval(timer);
} else if (count > ykTimeout) {
clearInterval(timer);
} else {
xxxx;
}
}
}).always(function () {
count++;
});
}, 1000);
如果后一个调用在前一个调用结束之前启动(设置的周期时间millisec过短或函数代码code执行时间过长),就会跳过第一个周期,直接执行后面第二个周期里的函数,等第二个结束后,继续执行第一个,所以最好不要使用周期调用。
(function loop(count) {
$.ajax({
url: `${serverUrl}/api/verify`,
type: "POST",
contentType: "application/json;charset=UTF-8",
dataType: 'json',
timeout : 5000,
data: JSON.stringify(data)
}).done(function (data) {
if (data.success) {
if (data.result) {
// 执行后续函数
} else {
// 是否轮询的条件,比如超过5次就不再轮询
if (count > 5) {
//超过5次
} else {
loop(count + 1);
}
}
} else {
layer.msg(res.msg, {
icon: 0,
shade: 0.3
});
}
}).fail(function (xhr, msg, err) {
layer.msg(res.msg, {
icon: 0,
shade: 0.3
});
})
})(0);
不用setInterval(),也可以很好的控制轮询次数