我遇到了异步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 */
});
我感谢任何帮助!
答案 0 :(得分:1)
如果递增后i < array.length
,则意味着您没有完成,因此您不希望在那里解决您的延迟。代替:
if(i < array.length) {
loadView();
} else { // ***
d.resolve();
}
另外,您不需要使用jQuery.when
。只是:
d.then(function() {
/* when all elements are insert, do something */
});