javascript - 如何正确使用 setInterval 和 clearInterval
问题描述
这是我写的代码。
function formatDate(date) {
var day;
if (date.getDate() < 10) {
day = "0" + date.getDate();
} else {
day = date.getDate();
}
var month;
var tempMonth = date.getMonth() + 1;
if ( tempMonth < 10){
month = "0" + tempMonth;
} else {
month = tempMonth;
}
var year = date.getFullYear();
return year + "-" + month + "-" + day;
}
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
jobDate = new Date(2016, 3, 7);
endDate = new Date(2016, 4, 1);
expireInterval = false;
timeoutVar = setTimeout(runJobFromJS,1000);
function runJobFromJS(){
var strDate = formatDate(jobDate);
console.log(strDate);
jobDate = jobDate.addDays(1);
if (jobDate >= endDate){
clearInterval(timeoutVar);
}
}
我原以为strDate
会打印从 4 月 7 日到 5 月 1 日的日期。但它只打印一次。为什么setInterval
不能正常工作
解决方案
您正在使用setTimeout
(以毫秒为单位的一段时间后执行一次函数)而不是setInterval
(连续执行一个函数)。
的文档setInterval
:
WindowOrWorkerGlobalScope mixin 的 setInterval() 方法重复调用函数或执行代码片段,每次调用之间有固定的时间延迟。它返回唯一标识间隔的间隔 ID,因此您可以稍后通过调用 clearInterval() 将其删除。
的文档setTimeout
:
WindowOrWorkerGlobalScope mixin(以及 window.setTimeout 的后续版本)的 setTimeout() 方法设置了一个计时器,该计时器在计时器到期后执行一次函数或指定的代码片段。
timeoutVar = setInterval(runJobFromJS,1000);//not setTimeout
function runJobFromJS(){
var strDate = formatDate(jobDate);
console.log(strDate);
jobDate = jobDate.addDays(1);
if (jobDate >= endDate){
clearInterval(timeoutVar);
}
}
演示:
function formatDate(date) {
var day;
if (date.getDate() < 10) {
day = "0" + date.getDate();
} else {
day = date.getDate();
}
var month;
var tempMonth = date.getMonth() + 1;
if ( tempMonth < 10){
month = "0" + tempMonth;
} else {
month = tempMonth;
}
var year = date.getFullYear();
return year + "-" + month + "-" + day;
}
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
jobDate = new Date(2016, 3, 7);
endDate = new Date(2016, 4, 1);
expireInterval = false;
timeoutVar = setInterval(runJobFromJS,1000);
function runJobFromJS(){
var strDate = formatDate(jobDate);
document.getElementById("result").textContent = strDate;
//console.log(strDate);
jobDate = jobDate.addDays(1);
if (jobDate >= endDate){
clearInterval(timeoutVar);
}
}
<span id="result"></span>
推荐阅读
- list - 在构建基本 Agda 函数时克服定义相等问题
- reactjs - componentWillUnmount 使用带有参数依赖的钩子
- google-bigquery - 在聚簇表 BigQuery 上安排插入
- r - 在 Mac OS 上安装没有管理员的 R
- excel - 如何根据特定条件突出显示散点图(Excel)中的特定数据点?
- python - 检查单词是否在一个系列中,然后从字符串中删除它
- android-memory - android 如何动态获取应用程序的内存使用情况,例如使用 android studio profiler 显示
- sass - 使用包含斜杠和冒号的属性选择器时出现重复的 CSS 排除
- android - 如何处理在 android kotlin 中上传文件的改造套接字超时?
- python - 将包含字符串和 int 对象的列表转换为字节数组以进行套接字通信