所以我有一个计时器功能来检查一个项目(如果没有找到额外的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();
我想知道是否可以获得任何指针(或帮助),使其更加优雅,尽可能减少代码。
答案 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 );
}