【问题标题】:returning value to higher scope inside from a chained functions in angular js从角度js中的链式函数将值返回到内部更高的范围
【发布时间】:2014-05-05 18:35:50
【问题描述】:

我有一个函数 getUsers,我想从 web api 返回 JSON .. 但我似乎无法获取数据,我无法返回数据,因为该函数在 $http 中。我该怎么办?

function getUsers() {
            $http({ method: 'GET', url: '/api/loginapi/userdetails' })
                     .success(function (data, status, headers, config) {
                         details = data;
                     });
            return details;
           }

【问题讨论】:

  • 回调需要调用另一个函数并将数据作为参数传递,或者将其分配给回调可以访问的某个“外部”变量。

标签: javascript angularjs


【解决方案1】:

$http 进行异步调用,因此您无法立即返回获取的数据。

您可以返回的是promise。好消息,$http() 回一个:

function getUsers() {
    return $http({ method: 'GET', url: '/api/loginapi/userdetails' });
}

然后你就可以使用你的函数了:

getUsers().then(function(data) {
    var details = data;

    // Process your details!
});

【讨论】:

  • 谢谢!!我试图弄清楚什么是承诺..以及如何在异步调用期间使用它..您的评论使它变得如此简单易懂!爱你 !!我希望我有足够的声望给你投票! :D :D
  • 不客气,很高兴能为您提供帮助!
【解决方案2】:

您可以肯定地访问那里的数据,$http 内部没有任何东西,我建议您将回调传递给getUsers(),然后对返回的数据做任何您想做的事情:

var getUsers=function(callback){
            $http({ method: 'GET', url: '/api/loginapi/userdetails' })
                     .success(function (data, status, headers, config) {
                         callback(data);
                     });
}

并在控制器中像这样使用它:

getUsers(function(users){
    $scope.whatever = users;
})

【讨论】:

    【解决方案3】:

    我为您的问题创建了 plunkr http://plnkr.co/edit/lqX4apmvnKM3i5jGZDQM?p=preview

    $http 返回一个承诺。请在http://johnmunsch.com/2013/07/17/angularjs-services-and-promises/ 阅读有关承诺的详细信息。如果您想编写异步应用程序,这是一个重要的理解。这是另一个有用的链接 - Inside my own Angular service, how do you get the return value back to the Controller that called the service?。参考答案。它解释了如何在 angularjs 中使用 promise 和 defered。

        var app = angular.module('plunker', []);
    
    
        app.service('UserService', ['$http', '$q',
            function($http, $q) {
                this.getUser = function() {
                    return $http({
                        method: 'GET',
                        url: 'data.json'
                    });
                };
            }
        ]);
        app.controller('MainCtrl', function($scope, UserService) {
            $scope.user = {};
            UserService.getUser().then(function(response){
                $scope.user = response.data;
            });
        });
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-22
      • 2011-07-06
      相关资源
      最近更新 更多