jQuery Asynchronous each()函数 - 如何退出回调?

时间:2012-04-08 21:50:12

标签: javascript jquery settimeout

我正在使用发布于:

的Asynchronous each()函数插件代码

jQuery Tips and Tricks

它运行良好但我似乎无法使用return退出正在运行的回调函数;或者返回true;结果是当满足条件“退出”时,它会停止所有剩余的$ .forEach“循环”执行。

由于插件实现了setTimeout循环方法,或许我只需要知道如何退出已经运行的setTimeout回调函数? BTW - 我避免使用for循环或$ .each()来避免浏览器锁定,同时发生大json处理。 “后台处理”循环显着提高了UI的性能。

$.forEach(json, 1000, function(idx,item) {
    if(some_condition) return true; //exit this timeout iteration

    //otherwise do something
});

jQuery.forEach = function (in_array, in_pause_ms, in_callback)
{
    if (!in_array.length) return; // make sure array was sent

    var i = 0; // starting index

    bgEach(); // call the function

    function bgEach()
    {
        if (in_callback.call(in_array[i], i, in_array[i]) !== false)
        {
            i++; // move to next item

            if (i < in_array.length) setTimeout(bgEach, in_pause_ms);
        }
    }

    return in_array; // returns array
};


jQuery.fn.forEach = function (in_callback, in_optional_pause_ms)
{
    if (!in_optional_pause_ms) in_optional_pause_ms = 10; // default

    return jQuery.forEach(this, in_optional_pause_ms, in_callback); // run it
};

非常感谢!

1 个答案:

答案 0 :(得分:0)

来自文档:

  

我们可以在特定的迭代中打破$ .each()循环   回调函数返回false。

编辑:这也适用于您的自定义forEach