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

时间:2018-12-13 03:03:13

标签: javascript typescript

我有一个自定义的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);
}

我当前的实现无效,因为我只是返回值。不是变量本身。可以在JS中做类似的事情吗?

执行示例

let stop = this.devicewise.customSetInterval(() => {
  console.log('HELLO!');
}, 1000);

setTimeout(() => {
  console.log('stopping!');
  stop = true;
}, 5000);

如果这不可能,我计划创建一个每次启动时都会添加到的布尔哈希图。然后创建一个customClearInterval函数来修改该哈希图。

1 个答案:

答案 0 :(得分:0)

似乎您想通过回调一次性执行,也许是这样的:

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();