javascript - jQuery deferred array not triggering .done() as expected -
i'm having trouble jquery deferreds. here's code:
function makeajaxcalls(purge){ var deferreds = []; // delete 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 '+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* ajax calls resolved run code $.when.apply(this, deferreds).done(function(){ console.log('done'); }); var deferreds = makeajaxcalls(purge); }; purgedeleteddocs()
as can see i'm using $.when.apply
i'm returning array of deferreds makeajaxcalls()
function.
here's i'm getting in console:
purging... done purging user id=5564e0f647f054512a9d64c9 purging client id=557079a04407058a49fd2f3d returning array 2 deferreds
now that's odd. i'm seeing done
before ajax calls have been made, let alone resolved. i'm passing this
apply()
using $
etc. makes no difference - , reading docs apply()
first parameter sets this
code that's expected behaviour.
the server correctly getting api calls made ajax calls being made, it's multiple deferreds seem resolve , trigger .done()
before they're made.
any ideas doing wrong?
// when *all* ajax calls resolved run code $.when.apply(this, deferreds).done(function(){ console.log('done'); }); var deferreds = makeajaxcalls(purge);
as can see i'm using
$.when.apply
i'm returning array of deferredsmakeajaxcalls()
function.
well you're not passing them $.when
function. instead, passing undefined
$.when
, before making call makeajaxcalls()
!
reorder statements to
var deferreds = makeajaxcalls(purge); $.when.apply(this, deferreds).done(function(){ console.log('done'); });
Comments
Post a Comment