Javascript 在超时、成功或超过最大尝试次数时多次尝试函数
我想知道在Javascript中是否有可能调用一个函数多达N次以获得真实值。如果返回值为Javascript 在超时、成功或超过最大尝试次数时多次尝试函数,javascript,settimeout,Javascript,Settimeout,我想知道在Javascript中是否有可能调用一个函数多达N次以获得真实值。如果返回值为true,则应立即返回。无论N次后返回值是多少,它至少应该返回 我仔细阅读了一下现有的资源,得出了这样的结论:这是不可能的,但通常是通过回调函数来完成的。有任何模式/最佳实践/示例吗?我提出了以下实现: multitry = function(time, tries, func, callback) { counter = 0; timer = setInterval(function() {
true
,则应立即返回。无论N次后返回值是多少,它至少应该返回
我仔细阅读了一下现有的资源,得出了这样的结论:这是不可能的,但通常是通过回调函数来完成的。有任何模式/最佳实践/示例吗?我提出了以下实现:
multitry = function(time, tries, func, callback) {
counter = 0;
timer = setInterval(function() {
((success = func(++counter)) || (counter >= tries))
&& !clearInterval(timer)
&& callback(success, counter)
;
}, time);
};
例如,如果已启用标记编辑,则每250毫秒尝试30次,可以运行以下操作:
javascript:(function(){
multitry = function(time, tries, func, callback) {
counter = 0;
timer = setInterval(function() {
counter++;
var value = func(counter);
if (value || counter >= tries) {
clearInterval(timer);
callback(value, counter);
}
}, time);
};
multitry(
250,
30,
function() {
return $('#tagnames').length;
},
function (success) {
console.log('Tag editor did open:', success);
}
);
}());
我提出了以下实施方案:
multitry = function(time, tries, func, callback) {
counter = 0;
timer = setInterval(function() {
((success = func(++counter)) || (counter >= tries))
&& !clearInterval(timer)
&& callback(success, counter)
;
}, time);
};
例如,如果已启用标记编辑,则每250毫秒尝试30次,可以运行以下操作:
javascript:(function(){
multitry = function(time, tries, func, callback) {
counter = 0;
timer = setInterval(function() {
counter++;
var value = func(counter);
if (value || counter >= tries) {
clearInterval(timer);
callback(value, counter);
}
}, time);
};
multitry(
250,
30,
function() {
return $('#tagnames').length;
},
function (success) {
console.log('Tag editor did open:', success);
}
);
}());
哦,天哪。只需使用if语句。没有理由用这样的布尔运算符把事情联系在一起,除非你的目标是故意让你的代码不可读……我个人不认为这是不可读的(分号可能有助于在其他地方放置更多),但这是真的,如果愿意,您可以将其封装在if语句中。@ircmaxell:我用if子句编辑了第二个示例,但在我看来,它并没有变得更具可读性。@ircmaxell:success值丢失,需要它,以便在回调中清楚是否成功。我也考虑过不使用变量,但是名称有点丢失了。哦,天哪。只需使用if语句。没有理由用这样的布尔运算符把事情联系在一起,除非你的目标是故意让你的代码不可读……我个人不认为这是不可读的(分号可能有助于在其他地方放置更多),但这是真的,如果愿意,您可以将其封装在if语句中。@ircmaxell:我用if子句编辑了第二个示例,但在我看来,它并没有变得更具可读性。@ircmaxell:success值丢失,需要它,以便在回调中清楚是否成功。我还考虑过不使用变量,但是名称有点丢失。参考:参考: