javascript - 为什么我收到 TypeError : onSuccess is not a function in my angularjs service

标签 javascript angularjs

我有一个 angularjs 服务,它利用 reangular 来调用电话。

angular.module('app.userSvc', [])
    .factory('userSvc', ['localStorageService', '$rootScope', 'Restangular',
        function(localStorageService, $rootScope, Restangular) {
            function checkIfLoggedIn() {
                return localStorage.getItem('token');
            }

            function login(email, password, onSuccess, onError) {
                Restangular.all('api/authenticate')
                    .post({
                        email: email,
                        password: password
                    })
                    .then(
                        function(response) {
                            localStorage.setItem('token', response.token);
                            onSuccess(response);
                        },
                        function(response) {
                            onError(response);
                        });
            }

            function logout() {
                localStorageService.remove('token');
            }

            function getCurrentToken() {
                return localStorage.getItem('token');
            }

            function getAuthenticatedUser(onSuccess, onError) {
                Restangular.one('api/authenticated_user?token=' + getCurrentToken()).get().then(function(response) {
                    onSuccess(response.user);
                }, function(response) {
                    onError(response);
                });
            }
            Restangular.setDefaultHeaders({
                'Authorization': 'Bearer ' + getCurrentToken()
            });
            return {
                checkIfLoggedIn: checkIfLoggedIn,
                login: login,
                logout: logout,
                getCurrentToken: getCurrentToken,
                getAuthenticatedUser: getAuthenticatedUser
            };
        }
    ]);

但是当我在 Controller 中调用 userSvc.getAuthenticatedUser() 方法时,我得到 TypeError: onSuccess is not a function 我就是这么调用它的。

console.log(userSvc.getAuthenticatedUser());

我做错了什么。我使用的是 Angular 1.6

最佳答案

预计会出现错误,因为您的服务方法需要回调方法,因此请传递它们

function getAuthenticatedUser(onSuccess, onError){
}

所以你需要传递回调方法

userSvc.getAuthenticatedUser(function() {}, function() {})
<小时/>

或者,您可以检查参数是否已定义以及 angular.isFunction

function getAuthenticatedUser(onSuccess, onError) {
    Restangular.one('api/authenticated_user?token=' + getCurrentToken()).get().then(function (response) {
        !!onSuccess && angular.isFunction(onSuccess) && onSuccess(response.user);
    }, function (response) {
        !!onError && angular.isFunction(onError) &&
        onError(response);
    });
}

关于javascript - 为什么我收到 TypeError : onSuccess is not a function in my angularjs service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42250412/

相关文章:

javascript - AngularJS:有条件的 ng 类,一个选项有多个匹配项。

angularjs - 在运行时配置 angularjs 路由

javascript - 添加元素时向正文添加垂直滚动以占据剩余空间

javascript - Angular 中的过滤器问题

javascript - 无法访问 ASP.NET MVC 中 View 文件夹内的 JavaScript 文件

javascript - 视频流启动时触发的事件,使用 getUserMedia

html - AngularJS 从 ng-repeat 设置父级高度

javascript - html 和 jquery 自动完成(输入值)

javascript - 如何在 meteor 应用程序中向 mongodb 添加两列唯一 ID?

javascript - Node.js - FCM 发送预定主题通知