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 ()
You can do that with $q.all.
var promises = [];
for (var i in $scope.filesimage) {
promises.push(upload($scope.filesimage[i]));
}
$q.all(promises).then(function() {
$scope.data.Images = imagePathsArray ;
$http.post({
//after finish uploads i need to post the paths
//of all images to save into database
});
});
function upload(file) {
return Upload.upload({
url: '/uploadImage',
data: { file: file }
}).then(function (resp) {
imagePathsArray.push(resp.data);
})
};
In the success callback of the upload function, after pushing the path:
imagePathsArray.push(resp.data);
if(imagePathsArray.length == $scope.filesimage.length){
pushtoDatabase();
}
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 condition
if ((imagePathsArray.length + failCounter) == $scope.filesimage.length){....}