Question: 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?

Answer: 
You can do that with [$q.all](https://docs.angularjs.org/api/ng/service/$q).

```
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){....}`