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

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

【问题讨论】:

    标签: javascript loops html canvas


    【解决方案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)
        }
        

        【讨论】:

        • 可以,但是不要使用字符串,使用实际的函数引用。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多