2017-04-12 3 views
1

비동기 JS 함수에 문제가 있습니다. 글쎄, 하나씩 요소를 삽입하는 함수가 있습니다. 이 작동합니다. 그러나 모든 .load()- 기능이 수행 된 후에 계속하고 싶습니다.JS가 여러 번 수행 된 후 계속됩니다. load() - 수행 된 함수

Deferred() 부분을 구현 한 방법은 분명히 잘못되었지만이를 달성하는 방법을 알지 못합니다.

참고 : 더 명확하게하기 위해 코드를 단순화했습니다.

var d = new jQuery.Deferred(); 
var i = index; 
function loadView() { 
    if(i > -1 && i < array.length) { 
     if(!jQuery.contains(document.documentElement, $(selector)[0])) { 
      /* do stuff here */ 
      panel.load(myPHPfile, function() { 
       $dom.append($(selector)); 
       i++; 
       if(i < array.length) { 
        loadView(); 
        d.resolve(); 
       } 
      }); 
     } 
    } 
} 
loadView(); 

jQuery.when(d).then(function() { 
    /* when all elements are insert, do something */ 
}); 

어떤 도움을 주셔서 감사합니다.

답변

1

증가한 후 i < array.length이면 완료되지 않았 음을 의미하므로 Deferred를 해결하고 싶지 않습니다. 대신 :

if(i < array.length) { 
    loadView(); 
} else {     // *** 
    d.resolve(); 
} 

별도로 jQuery.when을 사용할 필요가 없습니다. 바로 :

d.then(function() { 
    /* when all elements are insert, do something */ 
});