2016-01-22 2 views
1

Привет, я пытаюсь использовать метод обещания, чтобы дождаться выполнения вызовов внутри цикла for.However, я не могу удержаться.Подождите, пока вызовет угловой заводский ресурс для завершения внутри цикла

"возвращение mainArr" дает неопределенными

// экспорт CSV

Loop

//Assumes data is a json object list. 

function getCustomData(data){ 

      var mainArr=[]; 
      for (var i = 0; i < data.length; i++) { 
       var obj={}; 
       obj.word = $('#type-ahead-input').val(); 
       obj.synonym = data[i].word; 
       obj.similarityCount = (data[i].similarityCount).toFixed(2); 
       obj.emailCount = data[i].occuranceCount; 
       obj.synonymlist = getSynonymList(data[i].word); 
       mainArr.push(obj); 

      } 
      return mainArr; 
     } 
     function getSynonymList(inputWord){ 
      return WordService.getSynonymList({ 
       ids : inputWord 
      }).$promise 
        .then(function($response) { 
         var output = $response; 

         var wordList =[]; 
         for (var i = 0; i < output.length; i++) { 
          wordList.push(output[i].word); 
         } 

         return wordList; 
        }); 
     } 

ресурса фабрики Зов Подпись

getSynonymList : { 

     method : 'GET', 
     isArray: true, 
     async : false, 
     url : appRoot + '/synonym', 
     params : { 
      word : '@word' 
     } 
    }, 
+1

Возвращаемое значение 'getCustomData' не может быть неопределенным. –

+0

** return ** from onFulfilled callback в методе '$ prom.then' приводит к обещанию' $ q' **, а не данным **. Используя то же имя, 'getSynonymList', для службы, которая возвращает объект $ resource, и функция, которая возвращает обещание, делает ваш код запутанным и трудным для понимания. – georgeawg

ответ

1

Вам нужно нажать значение в массив обещаний, и использовать $q.all() разрешить множественные обещания

function getCustomData(data){ 

     var promises = []; // an array of promises 
     for (var i = 0; i < data.length; i++) { 
      // rest of you code here 

      var promise = $q.when(data); // returns a promise    
      promises.push(obj); 
     } 

     return $q.all(promises); 
    } 

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

myservice.getCustomerData(data).then(
    function successcallback(returnvalue){ 
    console.log(returnvalue); 
    }, 
    function errorcalback(error){ 
    console.log(returnvalue); 
} 

Это относится и к вашим функциям, так как вы используете петлю , (Обратите внимание, что я не реализовал вышеуказанный код, но должен предоставить вам схему)

Смежные вопросы