等待所有 $http.get 完成

Waiting for all $http.get to finish

我对此有点困惑。我在一个函数中有两个 get 调用。一旦这个完整的函数,即两个 get 调用完成,只有到那时这个函数才能完成它的工作。我应该如何使用 $q 让它按我想要的方式工作?这就是我现在拥有的:

function updateBlackList() {
    $http.get("http://127.0.0.1:8000/blacklist/entries/vehicle").then(function (res){
      console.log(res)    
      }).catch(function (err) {
        console.log(err)
      });


    })
    $http.get("http://127.0.0.1:8000/blacklist/entries/person").then(function (res){
      console.log(res)     
      }).catch(function (err) {
        console.log(err)
      });


    });
    return $q.when();

  }

这里是另一个函数,我需要等待上面的函数完成:

BlackListService.updateBlackList().then(function() {
              addVersion(server_version).then(function () {
                console.log("Blacklist update complete")
              })
            })

它并没有像我怀疑的那样做。在 tw get 请求完成之前调用黑名单完整控制台

您想将两个承诺合二为一 $q.all()

function updateBlackList() {
  return $q.all([
    $http.get("http://127.0.0.1:8000/blacklist/entries/vehicle")
    .then(function (res){console.log(res)})
    .catch(function (err) {console.log(err)}),

    $http.get("http://127.0.0.1:8000/blacklist/entries/person")
    .then(function (res){console.log(res)})
    .catch(function (err) {console.log(err)});
  ]);
}

此外,对于您的第二个示例,您可以链接承诺以获得更好看的代码:

BlackListService.updateBlackList()
.then(function() {
  return addVersion(server_version);
})
.then(function () {
  console.log("Blacklist update complete");
})

使用$q.all.

var VEHICLE_URL = "http://127.0.0.1:8000/blacklist/entries/vehicle";
var PERSON_URL = "http://127.0.0.1:8000/blacklist/entries/person";

function updateBlackList() {
  var p1 = $http.get(VEHICLE_URL).then(whatever);
  var p2 = $http.get(PERSON_URL).then(whatever);

  return $q.all([p1, p2]);
}

updateBlackList()
  .then(whateverElse);