此刻真的很挣扎,所以如果有人有任何建议会很棒。很确定这是我的一个简单复杂的事情,但我们会看到!
使用以下内容将文件上传到服务器
https://github.com/nervgh/angular-file-upload/wiki/Module-API
我正在为某些类型的文件创建文件上传器的几个实例(不能只使用一个,因为我需要不同的上传网址)
所以我有一个像
这样的清单var uploaders = [a list of file object uploaders]
我想要做的是遍历列表,在每个列表上调用uploadAll()
,然后在上传每个文件后,继续脚本。
问题是我不认为uploadAll
函数实现了promise
,因此当我尝试以下代码时,其余的脚本会在文件成功上传之前继续。
继承我拥有的东西
var deferred = $q.defer();
var uploaders = [my list of object uploaders]
var allUploads = uploaders.map(function(uploaders) {
var singleUploadPromise = uploaders.uploadAll();
return singleUploadPromise;
});
$q.all(allUploads).then(function() {
console.log('Finished uploading all files')
deferred.resolve('Finished uploading all files');
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
文件上传但脚本的其余部分在执行之前执行。当我
console.log(allUploads)
我获得了undefined
个项目的列表。很明显我在这里出错了,但我不确定如何继续前进。
答案 0 :(得分:1)
基于查看文件上传器的代码,.uploadAll()不会返回任何内容,但它确实有回调.onCompleteAll()。因此,您可以创建一个在每个上传者调用uploadAll()的回调函数中解析的deffered对象。
var uploaders = [my list of object uploaders];
var allUploads = uploaders.map(function(uploader) {
// you need one deffered object per uploader
var deferred = $q.defer();
// set up an onCompleteAll callback for each uploader
uploader.onCompleteAll = function() {
deferred.resolve('onCompleteAll');
};
// call uploadAll on each uploader
uploader.uploadAll();
return deferred;
});
var combinedUploads = $q.all(allUploads).then(function() {
console.log('Finished uploading all files');
}, function(error) {
console.log('error!');
});
return combinedUploads.promise; // assuming this was in another function
答案 1 :(得分:0)
它是uploadAll()方法导致你的问题。