jQuery 延迟数组未按预期触发 .done()
jQuery deferred array not triggering .done() as expected
我在处理 jQuery 延期时遇到了一些麻烦。这是我的代码:
function makeAjaxCalls(purge){
var deferreds = [];
// delete the documents
_.each(purge, function(element, index, list){
console.log('purging '+element.model+' id='+element.id);
deferreds.push(
$.ajax({
type: 'DELETE',
url: '/API/admin/purge/'+element.model+'/'+element.id
})
);
});
console.log('returning array with '+deferreds.length+' deferreds');
return deferreds;
};
function purgeDeletedDocs(){
console.log('purging...');
var purge = [];
_.each(arrayOfIDs, function(element, index, list){
purge.push({'model': arrayOfModels.get(element).get('modelName'), 'id': element});
}); // [{model: 'modelName', id: 'id'}...]
// when *all* the AJAX calls are resolved run this code
$.when.apply(this, deferreds).done(function(){
console.log('done');
});
var deferreds = makeAjaxCalls(purge);
};
purgeDeletedDocs()
如您所见,我正在使用 $.when.apply
,因为我从 makeAjaxCalls()
函数返回一个延迟数组。
这是我在控制台中得到的:
purging...
done
purging User id=5564e0f647f054512a9d64c9
purging Client id=557079a04407058a49fd2f3d
returning array with 2 deferreds
这很奇怪。我什至在 AJAX 调用之前就看到了 done
,更不用说解决了。我将 this
传递给 apply()
但使用 $
等没有区别 - 阅读 apply()
的文档第一个参数只是设置 this
对于代码,这是预期的行为。
服务器正确地进行了 API 调用,因此进行了 AJAX 调用,只是多个延迟似乎在它们之前解决并触发了 .done()
重新制作。
关于我做错了什么有什么想法吗?
// when *all* the AJAX calls are resolved run this code
$.when.apply(this, deferreds).done(function(){
console.log('done');
});
var deferreds = makeAjaxCalls(purge);
As you can see I'm using $.when.apply
as I'm returning an array of
deferreds from the makeAjaxCalls()
function.
嗯,但是您没有将它们传递给 $.when
函数。相反,您将 undefined
传递给 $.when
,甚至在调用 makeAjaxCalls()
!
之前
将您的语句重新排序为
var deferreds = makeAjaxCalls(purge);
$.when.apply(this, deferreds).done(function(){
console.log('done');
});
我在处理 jQuery 延期时遇到了一些麻烦。这是我的代码:
function makeAjaxCalls(purge){
var deferreds = [];
// delete the documents
_.each(purge, function(element, index, list){
console.log('purging '+element.model+' id='+element.id);
deferreds.push(
$.ajax({
type: 'DELETE',
url: '/API/admin/purge/'+element.model+'/'+element.id
})
);
});
console.log('returning array with '+deferreds.length+' deferreds');
return deferreds;
};
function purgeDeletedDocs(){
console.log('purging...');
var purge = [];
_.each(arrayOfIDs, function(element, index, list){
purge.push({'model': arrayOfModels.get(element).get('modelName'), 'id': element});
}); // [{model: 'modelName', id: 'id'}...]
// when *all* the AJAX calls are resolved run this code
$.when.apply(this, deferreds).done(function(){
console.log('done');
});
var deferreds = makeAjaxCalls(purge);
};
purgeDeletedDocs()
如您所见,我正在使用 $.when.apply
,因为我从 makeAjaxCalls()
函数返回一个延迟数组。
这是我在控制台中得到的:
purging...
done
purging User id=5564e0f647f054512a9d64c9
purging Client id=557079a04407058a49fd2f3d
returning array with 2 deferreds
这很奇怪。我什至在 AJAX 调用之前就看到了 done
,更不用说解决了。我将 this
传递给 apply()
但使用 $
等没有区别 - 阅读 apply()
的文档第一个参数只是设置 this
对于代码,这是预期的行为。
服务器正确地进行了 API 调用,因此进行了 AJAX 调用,只是多个延迟似乎在它们之前解决并触发了 .done()
重新制作。
关于我做错了什么有什么想法吗?
// when *all* the AJAX calls are resolved run this code $.when.apply(this, deferreds).done(function(){ console.log('done'); }); var deferreds = makeAjaxCalls(purge);
As you can see I'm using
$.when.apply
as I'm returning an array of deferreds from themakeAjaxCalls()
function.
嗯,但是您没有将它们传递给 $.when
函数。相反,您将 undefined
传递给 $.when
,甚至在调用 makeAjaxCalls()
!
将您的语句重新排序为
var deferreds = makeAjaxCalls(purge);
$.when.apply(this, deferreds).done(function(){
console.log('done');
});