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);
      });
 });

Как я могу отложить итерацию цикла, чтобы он дождался ответа на обещание

0
nescafe 3 Май 2016 в 09:20

2 ответа

Лучший ответ

Я думаю, вам придется написать свою собственную функцию для цикла, а не использовать angular.forEach.

Это делается с помощью рекурсии здесь

Что-то вроде ниже:

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);
1
Community 23 Май 2017 в 12:23
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);

Ошибок нет, но sanitizedresult пуст, что может быть причиной того, почему sanitizedresult пуст

0
maxhb 4 Май 2016 в 06:21