【问题标题】:Angular File Upload CallbackAngular 文件上传回调
【发布时间】:2016-04-24 23:41:09
【问题描述】:

目前真的在为此苦苦挣扎,所以如果有人有任何建议,那就太好了。很确定这是我把简单的事情复杂化的一个例子,但我们会看到的!

使用以下方式将文件上传到服务器

https://github.com/nervgh/angular-file-upload/wiki/Module-API

我正在为某些类型的文件创建多个文件上传器实例(不能只使用一个,因为我需要为每个文件提供不同的上传 URL)

所以我有一个类似的列表

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

【问题讨论】:

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


【解决方案1】:

根据查看文件上传器的代码,.uploadAll() 不会返回任何内容,但它确实有回调 .onCompleteAll()。因此,您可以创建一个延迟对象,您可以在每个上传者调用 uploadAll() 的回调函数中解析该对象。

        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

【讨论】:

  • 感谢您的发帖,看起来确实是一个可行的解决方案。有机会我会告诉你我的去向!
  • 太棒了!我很想知道这是否是你需要的。如果这不起作用,我可以再修改一些。
  • Angular 5 的任何示例?
【解决方案2】:

我猜是uploadAll() 方法导致了你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2018-05-06
    • 2017-11-04
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    相关资源
    最近更新 更多