1

我想知道是否可以在 Javascript 中调用一个函数最多 N 次来获得一个真实的值。如果返回是 ,它应该立即返回true。无论 N 次后的返回值如何,它至少应该返回。

我阅读了一些现有资源,发现这是不可能的,但通常使用回调函数完成。是否有任何模式/最佳实践/示例?

4

1 回答 1

1

我想出了以下实现:

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);
        }
    );
}());
于 2012-12-20T12:19:34.623 回答