实现一个打点计时器:
1.从 start 至 end,每隔100ms console.log 一个数字,每次数字增幅为 1
2.返回的对象中需要包含一个 cancel 方法,用于停止定时操作
3.第一个数字需要立即输出
1、简单直接
const count = (start,end)=>{
console.log(start);
let timer = setInterval(_=>{
if(start<end){
console.log(start+=1);
}
},100);
return {
cancel:()=>clearInterval(timer)
}
}
const fn = count(1,100);
setTimeout(_=>{
fn.cancel();
},2000);
2、详细版
function tapper(start,end){
if(start>end || Number.isNaN(Number(start)) || Number.isNaN(Number(end))){
throw TypeError('invalid input');
}
const interval = 100;
let isCancel = false;
const init = async ()=>{
console.info(start);
start++;
while(start<=end && !isCancel){
await new Promise(resolve=>{
setTimeout(_=>{
if(!isCancel){
console.info(start);
start++;
}
resolve();
},interval)
})
}
};
const cancel =()=>{
isCancel = true;
};
//直接调用
init();
return {
cancel
}
}
let demo = tapper(1,100);
let m = setTimeout(_=>{
demo.cancel();
},2000);