如何使用 Restangular 检查两个同时请求的完成

How to check for completion of two simultaneous requests with Restangular

我正在使用 Restangular 执行 2 个请求,

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

我想在它们完成后运行一些代码,我该怎么做?

您可以使用 $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 这将 运行 当所有都满足时。