【发布时间】:2013-09-27 09:23:50
【问题描述】:
我有一个数组(例如它是文件队列):
[{deferred: fileDef, data: file}, {...}, ...]
每个 fileDef 和 file 发送到上传函数,返回 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();
})
}
}
}
但这似乎很糟糕。如何写得更好?
【问题讨论】:
-
你为什么不连锁承诺呢??
-
因为我现在没有队列大小
-
上传失败会怎样?这不重要吗?
-
参见示例:github.com/tamtakoe/oi.file/blob/master/oi.file.js#L251
标签: angularjs promise deferred q