1

I need to make several calls to an api, and concatenate the results. I am using angularJS

$scope.myFunction = function() {
  let res;
  for (//some condition) {
    let data = MyService.query();
    data.$promise.then(function(r){
      // here I receive the response from the api and I "concatenate" the result in a variable
      res += r.someValue;
    }
  }
  // here I need to do something with **res** when all the api calls are done
}

the problem is that the code outside of the for loop is executed before all the api calls return a result.

How can I make the code after the for loop to wait all the code inside the loop is executed, and the res variable is fully populated? Using async/await does not work as I am getting this error

"angular.js:12808 ReferenceError: regeneratorRuntime is not defined"

and at the moment I can't add packages to package.json.

1 Answer 1

2

You can use Promise.all something like

$scope.myFunction = function() {
  let res=[];
  for (//some condition) {
    let data = MyService.query();
   let respPromise= data.$promise.then(function(r){
      // return the response 
      return r.someValue;
    })
    res.push(respPromise);
  }
  Promise.all(res).then(data=>{
    console.log(data);//data should contains all the responses here
  })
}

Working stackblitz

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.