2014-02-09 1 views
0

У меня есть функция, которая проверяет наличие записей, и если они существуют, она загружает их для каждого элемента. Это функция, которая происходит в цикле, поэтому мне может быть много записей. Я подумал, что я правильно использовал $ Q, чтобы разделить каждый $ http-запрос, чтобы ждать один за другим, чтобы они не все происходили одновременно, но все они срабатывают в то же время.

Я видел $ q.defer(); но не понимаю, как использовать его в моей реализации. Как это будет написано правильно, откладывая каждый вызов до тех пор, пока он не будет завершен?

CheckRecords: function(obj) { 
     var promise; 
     var promises = []; 

     if (obj.BD.img == 'checkedRecord') { 
      var objBDUrl = 'services/GetSurveyBD/?id=' + obj.BD.ID; 
      promise = $timeout(function(){ 
        $http.get(objBDUrl, { cache: true }).then(function(response) { 
         obj.BD.ID = obj.BD.ID; 
         obj.BD.data = response.data; 
        }); 
       }, 250); 
      promises.push(promise); 
     } 
     if (obj.MR.img == 'checkedRecord') { 

      var objMRUrl = 'services/GetMR/?id=' + obj.MR.ID; 
      promise = $timeout(function(){ 
       $http.get(objMRUrl, { cache: true }).then(function(response) { 
        obj.MR.ID = obj.MR.ID; 
        obj.MR.data = response.data; 
       }); 
      }, 250); 
      promises.push(promise); 
     } 
     $q.all(promises).then(function(){ 
      return obj; 
     }); 
    } 

ответ

0

Функция $q.all только гарантирует, что все запросы завершены, запросы по-прежнему выполняются немедленно, но их результаты будущих периодов. Если вы хотите контролировать порядок выполнения, выполните ваши запросы в функции результата.

0

$ q - сервис в модуле ng Служба, которая помогает вам выполнять функции асинхронно и использовать их возвращаемые значения (или исключения) при их обработке.