Angularjs:TypeError:无法读取属性'然后'未定义的

时间:2014-08-25 07:45:11

标签: angularjs

在angularjs项目中,我希望获取登录的用户数据并以html格式使用此数据。

为此,我有一个sessionService.js向服务器发送请求并从中获取响应。我在sessionService.js中有以下代码:

          login: function(email, password) {
               $http.post('/api/sessions', {user: {email: email, password: password} })
                    .then(function(response) {
                        service.currentUser = response.data.user;
                        if (service.isAuthenticated()) {
                            //$location.path(response.data.redirect);
                            $location.path('/record');
                        }
                    });
            },
           requestCurrentUser: function() {
                if (service.isAuthenticated()) {
                    alaki = $q.when(service.currentUser);
                    console.log("1"+JSON.stringify(alaki));
                    return alaki;
                } else {
                    return $http.get('/api/users').then(function(response) {
                        service.currentUser = response.data.user;
                        console.log("2"+JSON.stringify(service.currentUser));
                        return service.currentUser;
                    });
                }
            },

            isAuthenticated: function(){
                return !!service.currentUser;
            }

当我第一次致电requestCurrentUser时,if (service.isAuthenticated())正在运行,我在Chrome控制台中遇到错误:

TypeError: Cannot read property 'then' of undefined

如果我再次刷新页面,则此时else语句及以上错误不会发生。我不知道解决这个问题。如何解决此错误?

1 个答案:

答案 0 :(得分:0)

由于返回了$ http承诺,因此您需要在return之前添加$http.post()。因此,新代码看起来像 - return $http.post('/api/sessions'..)