Angular chaining promises from foreach loop

后端 未结 2 517
天涯浪人
天涯浪人 2021-01-23 18:34

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 ()          


        
相关标签:
2条回答
  • 2021-01-23 18:37

    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);
        })
    };
    
    0 讨论(0)
  • 2021-01-23 19:00

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

    0 讨论(0)
提交回复
热议问题