我对此感到有点困惑。我在函数内部有两个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请求之前调用Blacklist完成控制台
答案 0 :(得分:3)
您希望将两个承诺合并为$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");
})
答案 1 :(得分:2)
使用$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);