Mah*_*man 2 javascript ajax promise angularjs q
我有一个函数数组,其中每个函数promise从ajax调用返回.
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);
});
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是,如果所有文件都已成功上传,那么做一些事情.
$q.all(promises).then(function (responses) {
// do something
}, function (errors) {
// if any of the file upload fails, it should come here
});
Run Code Online (Sandbox Code Playgroud)
但问题是ajax 永远不会被解雇,并且$q.all总是通过函数数组转向成功.
我在做什么错了?
您正在将函数的引用推送到数组....不调用函数并推送返回的promise
尝试改变:
promises.push(uploadFile);
Run Code Online (Sandbox Code Playgroud)
至
promises.push(uploadFile());
Run Code Online (Sandbox Code Playgroud)
创建一个新的promise $q.defer(); 也是一个反模式,当Upload.upload()已经返回一个promise并且你可以简单地返回它