2017-04-12 17 views
1

非同期JS関数に問題があります。さて、要素を一つ一つ挿入する関数があります。これは機能します。しかし、私はすべての​​- 機能が完了した後に続けたいと思います。複数の.load() - 機能完了後にJSが続きます

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増分後は、実行されていないことを意味します。そのため、そこでは遅延を解決したくありません。代わりに

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

jQuery.whenを別途入力する必要はありません。ちょうど:

d.then(function() { 
    /* when all elements are insert, do something */ 
}); 
関連する問題