js渲染循环,一旦满足条件就会中断

Posted

技术标签:

【中文标题】js渲染循环,一旦满足条件就会中断【英文标题】:js render loop that breaks once a condition is met 【发布时间】:2011-04-18 10:07:24 【问题描述】:

如何设置 setInterval 渲染循环,一旦满足条件,就会中断?

【问题讨论】:

【参考方案1】:

尼克的回答完美。我通过返回一个承诺来扩展它

function checkUntil(conditionFunc, millisecondsInterval) 
    var retryCount = 0;
    var retryCountLimit = 100;

    var promise = new Promise((resolve, reject) => 
        var timer = setInterval(function () 
            if (conditionFunc()) 
                clearInterval(timer);
                resolve();
                return;
            
            retryCount++;
            if (retryCount >= retryCountLimit) 
                clearInterval(timer);
                reject("retry count exceeded");
            
        , millisecondsInterval);
    );

    return promise;

你可以像这样调用它

checkUntil(function () 
        return document.querySelector('body');
    , 500).then(function () 
          ...
          ...
        );

    );

【讨论】:

【参考方案2】:

clearInterval 使用setInterval 返回的ID 停止从setInterval 的重复:

var interval = setInterval(function() 
    // do your loop
    if (loop_should_stop) 
        clearInterval(interval);
    
, dt);

【讨论】:

这将导致它在停止前最后一次运行,检查需要在函数的开头。 是的。根据计算中断条件的位置,这可能是您想要的。【参考方案3】:

你可以存储区间ID并通过clearInterval()清除,例如

var timer = setInterval(myFunction, 1000);

function myFunction() 
  if(condition) 
    clearInterval(timer);
    return;
  
  //do stuff

或者如果你可以在设置条件的地方调用clearInterval(),那么下一个间隔不会运行,函数本身没有逻辑。

【讨论】:

【参考方案4】:

如果您询问如何停止使用 setInterval() 设置的函数调用,只需使用 clearInteval() function。 您首先必须保存对 setInterval 函数的引用,然后使用此引用来停止间隔:

var int=self.setInterval("your_function_name()",1000);
if(condition)
    clearInterval(int)

【讨论】:

可以,但是不要使用字符串,使用实际的函数引用。

以上是关于js渲染循环,一旦满足条件就会中断的主要内容,如果未能解决你的问题,请参考以下文章

初学Node事件循环

js循环条件满足但是不执行循环内容

满足条件后 RealtimeAnalyzer 退出

一旦满足条件,如何突破foreach?

循环语句

为啥我在 React JS 中的代码会进入满足这两个条件的无限循环?