AngularJS $ q. Отложенная очередь
У меня есть массив (например, это очередь файлов):
[{deferred: fileDef, data: file}, {...}, ...]
каждыйfileDef а такжефайл отправить, чтобы загрузить функцию, которая возвращаетfileDef.promise и позвонитьfileDef.resolve или жеfileDef.reject после загрузки.
Я хочу загружать файлы по порядку: загрузка следующего файла после загрузки предыдущего.
Сейчас пользуюсь
var queue = [];
var uploading = false;
//file input callback call each time the user selects files
function addAndUpload (file) {
queue.push({deferred: $q.defer(), data: file});
if (!uploading) recurceQueue();
function recurceQueue () {
if (queue.length) {
uploading = true;
var fileObj = queue.shift();
upload(fileObj.deferred, fileObj.data);
fileObj.deferred.promise.finally(function () {
uploading = false;
recurceQueue();
})
}
}
}
Но это кажется плохим. Как лучше написать?