2017-04-12 53 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 */ 
});