私は配列を持っています(それはファイルのキューです):
[{deferred: fileDef, data: file}, {...}, ...]
各fileDefおよびfile send to upload 関数は、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();
})
}
}
}
しかし、それは悪いようです。上手に書くには?