2012-04-08 3 views
-2

내가 비동기를 사용하고 각() 함수 플러그인 코드에 게시 :jQuery 비동기 each() 함수 - 콜백을 종료하는 방법?

jQuery Tips and Tricks

그것은 잘 작동하지만 수익을 사용하여 실행중인 콜백 함수를 종료 할 수없는 것; 또는 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 
}; 

감사합니다. 워드 프로세서

+0

[$ .each in jquery는 어떻게 탈옥합니까?] (http://stackoverflow.com/questions/3944083/how-do-i-break-out-of-an-each-in- jquery) –

+0

만약 당신이 정말로'return false;를 사용했다면 문제를 이해할 수 없다. 당신의 코드는 in_array를 통해 반복을 멈추어야한다. – Niko

+0

는 false를 반환했습니다. 안돼. $ .each()를 생각해야합니다. 내가 제공 한 플러그 코드를 참조하십시오. 각() 루프는 관련되지 않습니다. – Inator

답변

0

:

우리는 콜백 함수가 false를 반환하여 특정 반복에서 $의 .each() 루프를 중단 할 수 있습니다.

편집 : 이것은 사용자 정의 forEach에도 적용됩니다.

+0

이것은 $ .each() 루프가 아닙니다. – Inator

+0

@Inator :하지만 Matthew의 솔루션을 사용해 보셨습니까? if (in_callback.call (in_array [i], i, in_array [i])! == false)'콜백에서 false를 반환하면 다음과 같은 코드가 나타납니다. iterations를 중지합니다. –

+0

이 답변은 맞지만 설명이 잘못되었습니다. – Niko

관련 문제