$http returns 承诺代替数据

$http returns promise instead data

昨天我从 AngularJS 开始,所以我确定我在这个问题上非常愚蠢,但我们开始吧。

这是我的服务。

angular.module('UserService', ['ngResource'])
    .factory('User', ['$resource', '$http', function($resource, $http){

    User = {};
    User.login = function (){
        var url = 'http://example.com/api/user/login';
        loginInfo = $http({
            method: 'POST',
            url: url,
            data: "user=user&pass=imagethereisahugepasshere",
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        }).success(function(data){
            loginInfo = data;
        })
        return loginInfo;
    }


    return User;


}])

如果我将它附加到我的控制器并调用 console.log(User.login()),它 returns 我承诺而不是响应(这是正确的,根据网络 Chrome 选项卡)。

我做错了什么?

在您的代码中:-

 return--> loginInfo =$http({
                method: 'POST',
                url: url,
                data: "user=user&pass=imagethereisahugepasshere",
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            }).success(function(data){
                loginInfo = data;<-- doesn't come into picture
            })
    return loginInfo;<--$http service promise rather than local data variable

显然 loginInfo 是一个 $http 服务承诺。

因为是异步请求,函数returns时还没有完成。这就是为什么当请求实际完成时,你有一个成功回调来做任何需要做的事情。

取回 promise 允许您以不同的方式处理它 - 您可以使用 .then() 在 promise 完成后做一些事情。但重要的是要知道该函数将 return 在取回数据之前。