我有一个简单的.append
循环迭代100次。最后,我想表示它已完成,并且它没有触发。任何人都可以解释为什么.promise().done()
在这里不起作用:
$(document).ready(function(){
var iterate = function(){
alert("Start!");
for(var i=1; i<101; i++) {
$('body').append('Iteration ' + i + '<br>');
};
};
iterate().promise().done(function(){
$('body').append('Done! <br>');
alert("Finished!");
});
});
这不是一个特殊的图书馆。小提琴是here。谢谢!
答案 0 :(得分:1)
promise
用于在绑定到您正在调用promise
的对象的所有操作完成后执行操作。这意味着您不希望在iterate
电话的结果上拨打电话;你想在$('body')
上调用它:
iterate();
$('body').promise().done(function(){
$('body').append('Done! <br>');
alert("Finished!");
});
如果您正在执行异步操作,您会看到更多好处;随着代码的继续,实际上会继续完成的事情,例如动画。
按照目前的情况,你可以这样做:
iterate();
$('body').append('Done! <br>');
alert("Finished!");
这具有相同的效果,因为在第一个示例中,绑定到body
的所有操作都已运行。我们在iterate
中所做的一切都不是异步的,所以我们没有调用promise
,直到所有append
次调用已经已经完成。
答案 1 :(得分:-2)
iterate
- 不会返回任何内容,因此在promise()
上调用undefined
会导致错误
您需要返回$('body');
var iterate = function(){
alert("Start!");
for(var i=1; i<101; i++) {
$('body').append('Iteration ' + i + '<br>');
};
return $('body'); // add this line
};