I have an array of photo files that needed to upload to Azure Cloud Storage, and i using foreach loop to call upload as below:
$scope.savetemplate = function () {
var imagePathsArray = [];
$scope.filesimage = [];
$scope.filesimage.push($scope.file1);
$scope.filesimage.push($scope.file2);
$scope.filesimage.push($scope.file3);
for (var i in $scope.filesimage) {
$scope.upload($scope.filesimage[i]);
}
$scope.data.Images = imagePathsArray ;
$http({
//after finish uploads i need to post the paths
//of all images to save into database
})
};
$scope.upload = function (file) {
Upload.upload({
url: '/uploadImage',
data: { file: file }
}).then(function (resp) {
imagePathsArray.push(resp.data);
})
};
resp.data returns azure storage path and i need to push the paths into the imagePathsArray
How can i uses Angular Promise to wait for upload all the files finished and all the paths are stored in the imagePathsArray so i can proceed with
$scope.data.Images = imagePathsArray ;
so that i can get the paths in the array and perform $http post?
In the success callback of the upload function, after pushing the path:
Inside
pushtoDatabase
call the$http({ .... });
NOTE : You might like to consider the probability of the upload getting failed. In that case you can work-around using a counter of failed files say
failCounter
, and then inside the if check for the conditionif ((imagePathsArray.length + failCounter) == $scope.filesimage.length){....}
You can do that with $q.all.