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

Angular service partially available in a callback function

本文关键字:中部 函数 服务 回调      更新时间:2023-09-26

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

这里有一个plnckr,它有一个应用程序的简化版本。

这是我的代码:

控制器:

    function activate() {
        return featureService.getBoards().then(callBackOk, callBackError);
        function callBackOk(data) {
            vm.boards = data;
        };
        function callBackError(error) {
            console.log(error);
        };
    };

featureService:

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

这两个不定义是因为您在函数上调用angluar.toJson。只需尝试console.log(loginService.sissue),它就会打印出来。

函数issue仅在(detail.status==403 ||detail.status===401)为true时返回login(promise),否则返回undefined,并且您不能在未定义时调用它。

    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);
        }
    }