Javascript 使用返回变量停止与clearInterval()类似的自定义setInterval()函数
我有一个自定义的setInterval函数,可以在运行时修改间隔。我希望能够返回一个变量,调用方可以在以后修改它。与clearInterval()的工作原理类似 自定义设置间隔功能Javascript 使用返回变量停止与clearInterval()类似的自定义setInterval()函数,javascript,typescript,Javascript,Typescript,我有一个自定义的setInterval函数,可以在运行时修改间隔。我希望能够返回一个变量,调用方可以在以后修改它。与clearInterval()的工作原理类似 自定义设置间隔功能 customSetInterval(callback, interval) { let stop = false; this.startInterval(callback, interval, stop); return stop; } startInterval(callback, interval,
customSetInterval(callback, interval) {
let stop = false;
this.startInterval(callback, interval, stop);
return stop;
}
startInterval(callback, interval, stop) {
if (stop) {
return;
}
setTimeout(() => {
callback();
interval += 100;
this.startInterval(callback, interval, stop);
}, interval);
}
let stop = this.devicewise.customSetInterval(() => {
console.log('HELLO!');
}, 1000);
setTimeout(() => {
console.log('stopping!');
stop = true;
}, 5000);
我当前的实现不起作用,因为我只是返回值。而不是变量本身。在JS中可以做类似的事情吗
示例执行
customSetInterval(callback, interval) {
let stop = false;
this.startInterval(callback, interval, stop);
return stop;
}
startInterval(callback, interval, stop) {
if (stop) {
return;
}
setTimeout(() => {
callback();
interval += 100;
this.startInterval(callback, interval, stop);
}, interval);
}
let stop = this.devicewise.customSetInterval(() => {
console.log('HELLO!');
}, 1000);
setTimeout(() => {
console.log('stopping!');
stop = true;
}, 5000);
如果这是不可能的,我计划创建一个布尔哈希映射,我每次启动时都会添加它。然后创建一个customClearInterval函数来修改该hashmap。似乎您希望通过回调一次性执行,可能类似于:
class CustomInterval {
constructor() {
this.id = -1;
}
start(callback, interval) {
console.log(`executing callback in ${interval}ms`);
this.id = setTimeout(() => {
callback();
console.log('callback fired');
}, interval);
}
stop() {
clearTimeout(this.id);
console.log('stopped');
}
}
// ...
let j = new CustomInterval();
j.start(() => {
// do stuff here
}, 5000);
// after some other operations, you decided to cancel the above delayed execution
// no problem.
j.stop();
你能将
stop
包装在一个对象中并传递吗?你想用返回的变量实现什么?我想@jom有一个id来清除间隔,就像clearInterval
一样。@jom正确。我想让clearInterval与一个变量一起发生。这比管理映射中所有的运行间隔要方便得多。@AustenStone好的,那么为什么不在类构造函数中设置初始化的id呢?这应该可以在以后进行清理。Downvoter,请解释一下原因?这对我来说确实有效,应该可以解决OP的问题。除非我遗漏了什么。如果你认为我的帖子没有帮助,请说明原因。我喜欢你的回答++乔姆