내가 비동기를 사용하고 각() 함수 플러그인 코드에 게시 :jQuery 비동기 each() 함수 - 콜백을 종료하는 방법?
그것은 잘 작동하지만 수익을 사용하여 실행중인 콜백 함수를 종료 할 수없는 것; 또는 true를 반환합니다. Consquence는 "exit"조건이 충족 될 때 나머지 $ .forEach "loop"실행을 모두 중지한다는 것입니다.
플러그인이 setTimeout 루프 접근 방식을 구현하기 때문에 이미 실행중인 setTimeout 콜백 함수를 종료하는 방법을 알아야합니다. BTW - 큰 json 처리가 발생하는 동안 브라우저 잠금을 피하기 위해 for 루프 또는 $ .each()를 사용하지 않습니다. 루프를 "backgrounding"하면 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
};
감사합니다. 워드 프로세서
[$ .each in jquery는 어떻게 탈옥합니까?] (http://stackoverflow.com/questions/3944083/how-do-i-break-out-of-an-each-in- jquery) –
만약 당신이 정말로'return false;를 사용했다면 문제를 이해할 수 없다. 당신의 코드는 in_array를 통해 반복을 멈추어야한다. – Niko
는 false를 반환했습니다. 안돼. $ .each()를 생각해야합니다. 내가 제공 한 플러그 코드를 참조하십시오. 각() 루프는 관련되지 않습니다. – Inator