在 Angular JS 中取回 HTTP 请求的值

Get back the value of a HTTP Request in Angular JS

我尝试创建一个函数,它在 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;
    };

我找到了很多关于发出请求但不取回其值的方法的文章(在另一个中简单调用函数只是显示 "object object" 而我没有找到正确显示它的解决方案)。

$scope.test = function() {
        var myValue = $scope.getInfo();
        alert(myValue); /* show [Object object] */
    };

你能帮帮我吗?

使用 Promise 时应该这样进行:

 $http({
     method: 'GET',
     url: 'https://api.net'
 }).then(function (response) {
     $scope.info = response.data
 });

您当前的代码 return 一个 Promise,这就是为什么将 getInfo 编辑的结果 return 视为一个对象

如果你想让 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);
});

使用 $http 服务的一个常见错误是将此服务方法的 return 值分配给一个变量,这是一个不是您想要的承诺。

考虑下面的代码:

$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 是一种方法,它 return 是一个承诺,将来的承诺将解析为您想要的数据值。

如果你在你的控制器中这样使用它:

$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;
           })

    };