javascript - Pass in an array of Deferreds to $.when() -
here's contrived example of what's going on: http://jsfiddle.net/adamjford/yngcm/20/
html:
<a href="#">click me!</a> <div></div>
javascript:
function getsomedeferredstuff() { var deferreds = []; var = 1; (i = 1; <= 10; i++) { var count = i; deferreds.push( $.post('/echo/html/', { html: "<p>task #" + count + " complete.", delay: count }).success(function(data) { $("div").append(data); })); } return deferreds; } $(function() { $("a").click(function() { var deferreds = getsomedeferredstuff(); $.when(deferreds).done(function() { $("div").append("<p>all done!</p>"); }); }); });
i want "all done!" appear after of deferred tasks have completed, $.when()
doesn't appear know how handle array of deferred objects. "all done!" happening first because array not deferred object, jquery goes ahead , assumes it's done.
i know 1 pass objects function $.when(deferred1, deferred2, ..., deferredx)
it's unknown how many deferred objects there @ execution in actual problem i'm trying solve.
to pass array of values any function expects them separate parameters, use function.prototype.apply
, in case need:
$.when.apply($, my_array).then( ___ );
see http://jsfiddle.net/yngcm/21/
in es6, can use ...
spread operator instead:
$.when(...my_array).then( ___ );
in either case, since it's unlikely you'll known in advance how many formal parameters .then
handler require, handler need process arguments
array in order retrieve result of each promise.
Comments
Post a Comment