Помог совет из связанного вопроса: можно заюзать deferred объекты. Единственный нюанс, тк у нас не чистый вызов $.ajax() необходимо создать свое deffered поведение (
habrahabr.ru/post/112960)
Получаем нечто вроде
var allImages=[];
var dfd= $.Deferred();
$('.fileupload').fileupload({
add: function (e, data) {
allImages.push(data);
},
always: function (e, data) {
countUploadedFiles++;
if (countUploadedFiles === needed) {
dfd.resolve();
}
}
});
$('#start_uploads').click(function () {
$.when(uploadAllImages())
.then(function () {
// some code
});
return false;
});
function uploadAllImages() {
for (var i = 0; i < allImages.length; i++) {
allImages[i].submit();
}
allImages = [];
return dfd.promise();
}