【发布时间】:2012-04-08 21:50:12
【问题描述】:
我正在使用发布于:
的异步 each() 函数插件代码效果很好,但我似乎无法使用 return 退出正在运行的回调函数;或返回真;。结果是,当满足“退出”条件时,它会停止所有剩余的 $.forEach “循环”执行。
由于插件实现了 setTimeout 循环方法,也许我只需要知道如何退出已经运行的 setTimeout 回调函数?顺便说一句 - 我避免使用 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
};
非常感谢!
【问题讨论】:
-
我不太明白这里的问题,如果您只是
return false;,您的代码应该停止循环 in_array(并继续处理所有其他返回值,甚至是undefined)。 -
试过返回false;不行。你一定在想$.each()。请参阅我提供的插头代码。不涉及 each() 循环。
-
@Inator,你的问题和标题都说
each。 -
请发布回调的代码 -
if (in_callback.call(in_array[i], i, in_array[i]) !== false)这一行确保如果返回“false”,则迭代停止。问题一定出在其他地方……
标签: javascript jquery settimeout