Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用返回变量停止与clearInterval()类似的自定义setInterval()函数_Javascript_Typescript - Fatal编程技术网

Javascript 使用返回变量停止与clearInterval()类似的自定义setInterval()函数

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,

我有一个自定义的setInterval函数,可以在运行时修改间隔。我希望能够返回一个变量,调用方可以在以后修改它。与clearInterval()的工作原理类似

自定义设置间隔功能

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的问题。除非我遗漏了什么。如果你认为我的帖子没有帮助,请说明原因。我喜欢你的回答++乔姆