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();
创建新的承诺也是一个反对品,您可以简单地返回