Angular 服务在回调函数中部分可用

Angular service partially available in a callback function

在我的 angular 简单应用程序中,我遇到一个工厂问题,该工厂在回调函数中不完全可用。

Here is a plnckr 带有简化版本的应用程序。

这是我的代码:

控制器:

    function activate() {

        return featureService.getBoards().then(callBackOk, callBackError);

        function callBackOk(data) {
            vm.boards = data;
        };

        function callBackError(error) {
            console.log(error);
        };
    };

功能服务:

function getBoards() {

        return connectionService.get(urls.featureUrl).then(callBack, callBackError);

        function callBack(response) {

            boards = {};
            actuators = [];

            response.data.forEach(function(feature){
                formatFeature(feature);
                storeFeature(feature);
            });

            return boards;
        }

        function callBackError(error) {
            var deferred = $q.defer();

            console.log(angular.toJson(loginService.issue));
            console.log(angular.toJson(loginService.isOk));
            console.log(angular.toJson(loginService.error));
            console.log(angular.toJson(loginService));

            loginService.issue("Unable to retrieve objects", error).then(function(){
                deferred.resolve(getBoards());
            }, function(error){
                deferred.reject(error);
            });

            return deferred.promise;
        }
    }

控制台记录:

undefined features.services.js:71:1
undefined features.services.js:72:1
{"label":"","detail":{}} features.services.js:73:1
{"error":{"label":"","detail":{}},"graphicDefered":{}} features.services.js:74:1
Error: loginService.issue(...) is undefined
    callBackError@http://localhost:8100/app/features/features.services.js:76:17

最后,从 loginService 返回的对象:

    return {
        'login'     : login,
        'logout'    : logout,
        'isOk'      : function(){return ok;},
        'issue'     : issue,
        'error'     : error,
        'graphicDefered' : graphicDefered
    };

我假设 get 方法抛出一个异常,该异常将被 callBackError 函数拦截。我怀疑是延迟加载器,但我不知道如何修复它...

undefined features.services.js:71:1
undefined features.services.js:72:1

这两个 undefiends 是因为你在函数上调用 angluar.toJson。只需尝试 console.log(loginService.issue) 它就会打印出来。

仅功能问题 returns login(promise) if (detail.status === 403 || detail.status === 401) is true else it returns undefined你不能在未定义的情况下调用 then。

    function issue(label, detail) {
        error.label = label;
        error.detail = detail;

        if (detail.status === 403 || detail.status === 401) {
            ok = false;

            return login(account.mail, account.pwd);
        }
    }