JSFiddle: https://jsfiddle.net/TrueBlueAussie/v6cgak1u/2/
promise = promise.then(functionReturningNextPromise):
function syncAll() {
var promise = $.when();
var forms = [
{'name':'form 1'},
{'name':'form 2'},
{'name':'form 3'},
{'name':'form 4'}];
$.each(forms, function (index, value) {
promise = promise.then(function(){
var def = $.Deferred();
setTimeout(function () {
$("#output").html("Syncing: " + value.name);
def.resolve({ 'message': 'finito!' });
}, 3000);
return def.promise();
});
});
return promise;
}
$.when(syncAll()).done(function(response){
$("#output").html(response.message);
});
, setTimeout , ( setTimeout).
, new $.Deferred()
:
javascript jQuery , :
function syncAll() {
var forms = [
{'name':'form 1'},
{'name':'form 2'},
{'name':'form 3'},
{'name':'form 4'}
];
return forms.reduce(function(promise, value) {
return promise.then(function() {
return $("#output").delay(1000).html("Syncing: " + value.name).promise();
});
}, $.when()).then(function() {
return {'message': 'finito!'};
});
}
syncAll().then(function(response) {
$("#output").html(response.message);
});
, , :