Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.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';是否执行清除前传入的函数/Id?_Javascript_Mobx - Fatal编程技术网

Javascript 是否';clearInterval';是否执行清除前传入的函数/Id?

Javascript 是否';clearInterval';是否执行清除前传入的函数/Id?,javascript,mobx,Javascript,Mobx,我有一段代码,但我不明白它是如何工作的。我的目标是 触发一个每.25秒递增10的函数(startLoadingProgress) 如果此操作持续5秒,请取消间隔 如果需要,可以在5秒钟之前手动取消间隔(finishLoadingProgress) 这就是我想到的。请注意,我使用的是MobX,但这不应影响我尝试执行的操作的可读性 intervalId: number = 0; timer(): any { return setInterval(() => { r

我有一段代码,但我不明白它是如何工作的。我的目标是

  • 触发一个每.25秒递增10的函数(
    startLoadingProgress
  • 如果此操作持续5秒,请取消间隔
  • 如果需要,可以在5秒钟之前手动取消间隔(
    finishLoadingProgress
这就是我想到的。请注意,我使用的是MobX,但这不应影响我尝试执行的操作的可读性

intervalId: number = 0;

timer(): any {
    return setInterval(() => {
        runInAction(() => {
            this.loadingProgress += 10;
        });
    }, 250);
}

@action startLoadingProgress = () => {
    this.intervalId = this.timer();

    setTimeout(() => {
        clearInterval(this.intervalId);
    }, 5000);
};

@action finishLoadingProgress = () => {
    this.loadingProgress = 100;
    clearInterval(this.intervalId);       
};

我不明白为什么
clearInterval(this.intervalId)触发我的
定时器()
函数。我正在用
this.intervalId=this.timer()分配一个id
但是为什么当传递到
clearInterval
时,此id引用的函数会触发?(我已经用
console.log
语句检查过了)

我怀疑有什么东西在多次调用
startingprogress()
。第二次调用将启动一个新的计时器并替换此。使用此计时器进行intervalId,但第一个计时器将继续运行。启动新计时器时,应取消上一个计时器

@action startLoadingProgress = () => {
    clearInterval(this.intervalId);
    this.intervalId = this.timer();

    setTimeout(() => {
        clearInterval(this.intervalId);
    }, 5000);
};

您可能还需要重置
此项。同时将进度
加载到
0

clearInterval()
不会触发计时器回调。不直接相关,但您可能需要稍微调整数字。5000/250=20和100/20=5您的描述不太清楚。。。你怎么知道clearInterval调用了你的函数?这个函数显然是由
timer()
方法调用的,在250ms之后,您如何调用所有这些代码?问题可能出在调用代码中。