Как проверить выполнение двух одновременных запросов с помощью Restangular

Я делаю 2 запроса, используя Restangular,

  Restangular.all('clients').getList().then(function(clients) {
    $scope.clients = clients;
  });
  Restangular.all('suppliers').getList().then(function(suppliers) {
    $scope.suppliers = suppliers;
  });

Я хочу запустить некоторый код после того, как они закончат, как я могу это сделать?


person Salal Aslam    schedule 02.01.2015    source источник


Ответы (1)


Вы можете использовать $q.all и добавить оба промиса в качестве входных данных. И вам нужно будет ввести $q.

  var clientsPromise = Restangular.all('clients').getList().then(function(clients) {
     $scope.clients = clients;
  });
  var suppliersPromise = Restangular.all('suppliers').getList().then(function(suppliers) {
     $scope.suppliers = suppliers;
  });

   $q.all([clientsPromise, suppliersPromise])
     .then(function(results){ //This will execute only when both the promises have been fulfilled
       //Do something;
   });

Для большей удобочитаемости вы также можете сделать: -

 function populateClients(){
    return Restangular.all('clients').getList().then(function(clients) {
       $scope.clients = clients;
    });
 }

 function populateSuppliers(){
    return Restangular.all('suppliers').getList().then(function(suppliers) {
      $scope.suppliers = suppliers;
   });
 }

 $q.all([populateClients(), populateSuppliers()]).then(doSomethingFn, handleError);

Обратный вызов успеха q.all будет выполняться только тогда, когда оба обещания будут разрешены, если одно из них не будет выполнено, оно перейдет к блоку catch, и вы можете использовать finally, который запустится, когда все будут выполнены.

person PSL    schedule 02.01.2015
comment
Спасибо Прамод! это помогло - person Salal Aslam; 02.01.2015