角度文件上传回调

时间:2016-01-19 13:15:58

标签: javascript angularjs file-upload angular-file-upload

此刻真的很挣扎,所以如果有人有任何建议会很棒。很确定这是我的一个简单复杂的事情,但我们会看到!

使用以下内容将文件上传到服务器

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个项目的列表。很明显我在这里出错了,但我不确定如何继续前进。

2 个答案:

答案 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()方法导致你的问题。