我有以下脚本:
$q.all([
getActive(),
getUser()
])
.then(function (results) {
var x = results[0];
var y = results[1];
}
function getActive() {
$http({
url: '/api/Test/GetActive',
method: "GET"
})
};
function getUser() {
$http({
url: '/api/Test/GetUser',
method: "GET"
})
};
我希望看到变量x和y包含$ http调用的结果,但它们都显示为undefined。
有人可以建议我如何让这些电话回复承诺。我实际上认为$ http确实返回了一个承诺,所以我很困惑。
答案 0 :(得分:2)
您似乎错过了return
和getActive()
函数中的getUser()
语句。
试试这个:
$q.all([
getActive(),
getUser()
])
.then(function (results) {
var x = results[0];
var y = results[1];
}
function getActive() {
return $http({
url: '/api/Test/GetActive',
method: "GET"
});
};
function getUser() {
return $http({
url: '/api/Test/GetUser',
method: "GET"
});
};
答案 1 :(得分:1)
这是一个有效的例子。我用几个小方法改变了你的代码。注意:来自各个调用的返回promise,调用$ http的简化方法,以及从then()函数中返回返回结果的数据:
http://plnkr.co/edit/YStkRt?p=info
function MainCtrl($scope, $q, $http) {
$q.all([
getActive(),
getUser()
])
.then(function (results) {
$scope.ip = results[0].data;
$scope.headers = results[1].data;
});
function getActive() {
return $http.get('http://ip.jsontest.com/');
}
function getUser() {
return $http.get('http://headers.jsontest.com/');
}
}