我尝试创建一个在Javascript中生成HTTP请求并获取此请求结果的函数。不幸的是,我绝对不知道如何在其他功能中取回这个结果。
在这里找到我的两个功能(两者都应该做同样的事情):
$scope.getInfo = function() {
return $http({
method: 'GET',
url: 'https://api.net'
}).then(function (response) {
return response.data;
});
};
另一个:
$scope.getInfo = function() {
var defer = $q.defer();
$http.get('https://api.net').then(function(response) {
defer.resolve(response.data);
}, function(response) {
defer.reject(response);
});
return defer.promise;
};
我发现了很多关于提出请求的方法的文章,但没有找回它的价值(在另一个方面简单调用该函数只是显示"对象对象"我没有&# 39;找到一个正确显示的解决方案。)
$scope.test = function() {
var myValue = $scope.getInfo();
alert(myValue); /* show [Object object] */
};
你能帮我吗?
答案 0 :(得分:1)
使用Promise时应该这样做:
$http({
method: 'GET',
url: 'https://api.net'
}).then(function (response) {
$scope.info = response.data
});
您当前的代码返回一个Promise,这就是getInfo返回的结果被视为对象的原因
如果你想让getInfo成为一个函数,你可以这样做:
$scope.getInfo = function() {
return $http({
method: 'GET',
url: 'https://api.net'
}).then(function (response) {
return response.data;
});
};
$scope.getInfo().then(function(result) {
alert(result);
});
答案 1 :(得分:1)
使用$http
服务时常见的错误是将此服务方法的返回值分配给一个变量,该变量不是您想要的承诺。
请考虑以下代码:
$scope.getInfo = function() {
return $http({
method: 'GET',
url: 'https://api.net'
}).then(function (response) {
return response.data;
}).catch(function(error){
// do something with error
throw error;
});
};
getInfo
是一种返回承诺的方法,将来的承诺将解析为您想要的数据值。
如果您在控制器中使用它:
$scope.test = function() {
var myValue = $scope.getInfo();
alert(myValue); /* show [Object object] */
};
myValue
的值是一个承诺(您只需执行console.log(myValue)
),建议的方法是使用此方法,如下所示:
$scope.test = function() {
$scope.getInfo()
.then(function(response){
var myValue = response.data;
alert(myValue); /* show [Object object] */
}).catch(function(error) {
console.log(error);
throw error;
})
};