在Angular JS

时间:2016-07-22 14:25:51

标签: javascript angularjs asynchronous httprequest deferred

我尝试创建一个在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] */
    };

你能帮我吗?

2 个答案:

答案 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;
           })

    };