Javascript,试图压缩计时功能

时间:2015-03-25 14:26:07

标签: javascript

所以我有一个计时器功能来检查一个项目(如果没有找到额外的5秒,每200毫秒一次5000毫秒),我希望尝试压缩这个功能。它完成了当前的工作,看起来我似乎正在使用过多的代码来完成它。这就是我所拥有的:

var timeToCheck = true;
    setTimeout(function() {
        timeToCheck = false;
    }, 5000);

    var check = {
        init: function() {
            check.checkAgain();
        },
        checkAgain: function() {
            if (timeToCheck) {
                if (currentModules[name]) {
                    //by some act of god, this module exists now
                } else {
                    //still doesn't exists
                    setTimeout(check.checkAgain, 200);
                }
             } else {
                  //doesn't exist after 5 seconds
                  $log.error("Requested module (" + name + ") could not be found at this time.");
             }
          }
      };
      check.init();

我想知道是否可以获得任何指针(或帮助),使其更加优雅,尽可能减少代码。

1 个答案:

答案 0 :(得分:1)

我认为以递归方式调用check会更加清晰。你应该避免使用两个单独的setTimeouts(它可能最终会阻止你意想不到的结果,特别是在timeouts相互依赖的情况下) - 如果你不熟悉它,请在事件循环中读取的工作原理。

var TIMEOUT_DUR = 200;
var MAX         = 5000;
var accum       = 0;

function check () {
    if ( accum >= MAX ) {
        $log.error( '...' );
        return;
    }

    setTimeout( function () {
        if ( currentModules[ name ] ) {
            // do things
            return;
        }
        accum += TIMEOUT_DUR;
        check();
    }, TIMEOUT_DUR );
}