nescafe
nescafe

Reputation: 187

Is there a possible way implementing Promise inside angular.foreach?

 var sanitizedresult=[];
    angular.forEach(voteResult, function(value, key) {
      // console.log(value.poll_watcher_id);
      var param={
        id : value.candidate_id
      }
      CandidateService.getCandidatInfo(param).then(function(success){

        // console.log(success);
        var row = {
                    ballot_name: success,
                    vote_count: value.count
                  }
                  console.log(row);
        sanitizedresult.push(row);
      },function(fail){
        console.log(fail);
      });
 });

How can I delay the iteration of the loop for it to wait the response of the promise

Upvotes: 0

Views: 243

Answers (2)

nescafe
nescafe

Reputation: 187

var sanitizedresult=[];

var processVotes = function(voteResult,idx){
    var param={
        id : voteResult[idx].candidate_id
      }
  CandidateService.getCandidatInfo(param).then(function(success){

    // console.log(success);
    console.log(idx+"Thi is it");
    var row = {
                ballot_name: success,
                vote_count: voteResult[idx].count
              }
              console.log(row);
    sanitizedresult.push(row);
    if(idx < voteResult.length-1){
        processVotes(voteResult,idx+1);
    }
  },function(fail){
    console.log(fail);
    if(idx < voteResult.length-1){
        processVotes(voteResult,idx+1);
    }       
  });   
}
processVotes(voteResult,0);

console.log(sanitizedresult);

There are no errors but still the sanitizedresult is empty what will be the possible cause why the "sanitizedresult" is empty

Upvotes: 0

Maverick
Maverick

Reputation: 454

I think you will have to write your own function to loop rather than using angular.forEach.

This is done using recursion here

Something like below:

var sanitizedresult=[];

 var processVotes = function(voteResult,idx){
        var param={
            id : voteResult[idx].candidate_id
          }
      CandidateService.getCandidatInfo(param).then(function(success){

        // console.log(success);
        var row = {
                    ballot_name: success,
                    vote_count: value.count
                  }
                  console.log(row);
        sanitizedresult.push(row);
        if((idx+1) < voteResult.length){
            processVotes(voteResult,idx+1);
        }else{
           //use sanitizedResult here -- maybe a function call
        }
      },function(fail){
        console.log(fail);
        if((idx+1) < voteResult.length){
            processVotes(voteResult,idx+1);
        }else{
           //use sanitizedResult here -- maybe a function call
        }

      });   
 }
 processVotes(voteResult,0);

Upvotes: 1

Related Questions