用$ q链条返回功能



i具有一系列函数,每个函数都会从ajax调用返回 promise

var promises = [];
if (form.$valid) { 
  Object.keys($scope.Model.Data.FormFiles).forEach(function (key) {
    var file = $scope.Model.Data.FormFiles[key];
    function uploadFile(){
        var deferred = $q.defer();
        var upload = Upload.upload({
            url: "/api/ir/funnelApi/UploadFile",
            data: { file: file }
        });
        upload.then(function (response) {                           
                // do something
                deferred.resolve(response.statusText);
            }, function (error) {
                deferred.reject(error.data);
            }, function (evt) {
        });             
        return deferred.promise;
    }       
    promises.push(uploadFile);
  });   
}

我要做的是,如果所有文件已成功上传,那就做点什么。

$q.all(promises).then(function (responses) {                    
   // do something
}, function (errors) {
   // if any of the file upload fails, it should come here  
});

但是问题是Ajax是从未触发的,并且$q.all总是通过功能数组成功。

我在做什么?

您将功能的引用推向数组。...不调用函数并推动返回的Promise

尝试更改:

promises.push(uploadFile);

to

promises.push(uploadFile());

Upload.upload()已经返回诺言时,使用$q.defer();创建新的承诺也是一个反对品,您可以简单地返回

相关内容

  • 没有找到相关文章

最新更新