2017-04-12 29 views
1

我遇到了一個異步JS函數的問題。那麼我有一個函數插入元素一個接一個。這工作。但是我想在所有​​函數完成後繼續。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增加後,這意味着你沒有完成,所以你不想解決你的延期那裏。相反:

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

另外,您不需要使用jQuery.when。只需:

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