超时angularjs中的未定义函数

时间:2014-12-14 19:24:14

标签: javascript angularjs

我有以下控制器:

app.controller('ListeSASController', function($scope, $rootScope, $routeParams, $location, userService, RefreshSASServices, $timeout){
        this.IsUserLogged = function()
        {
            return userService.user().isLogged;
        };

        var promise = $timeout(RefreshSASServices.RafraichirSAS(), 100);

        this.getSAS = function(){
            return RefreshSASServices.getSAS();
        };

        $scope.$on('$locationChangeStart', function(){
            RefreshSASServices.ArreterLesRafraichissements();
        });
});

使用以下服务:

app.service('RefreshSASServices', function($http, userService, serverConfigService, $q, $timeout, $translate, constantsServices) {
    var listeSAS = [];
    var $this = this;

    var promiseRefreshSAS;

    // Getters
    this.getSAS = function()
    {
        return listeSAS;
    };


    //Setters
    this.clearDatas = function()
    {
        listeSAS = [];
    };


    // Communication with the server
    $this.getServerUri = function()
    {
        return serverConfigService.getServerUri()+"majsvc/";
    };




    // Fonctions de rafraichissement
    $this.ArreterLesRafraichissements = function()
    {
        if(promiseRefreshSAS !== undefined)
            $timeout.cancel(promiseRefreshSAS);
    };

    $this.GetSASFromServer = function()
    {
        var promises;
        if(userService.user().isLogged)
        {
            var uri = $this.getServerUri() + "getAllSAS/"+userService.user().UserObject._id;
            promises = $http.get(uri)
            .success(function(data, status, headers, config) {
                // this callback will be called asynchronously
                // when the response is available
                return data;
            }).
            error(function(data, status, headers, config) {
                // called asynchronously if an error occurs
                // or server returns response with an error status.
                return "";
            });
        }else{
            promises = $q.when(!userService.user().isLogged)
        }
        return promises;    
    };
    $this.RafraichirSAS = function () {
    // functions that call
            $this.GetSASFromServer()
            .then(function(promise){

                if(promise !== undefined && promise.data !== undefined)
                {
                    listeSAS = promise.data;
                    //alert('refreshing the SAS list:' + JSON.stringify(listeSAS));

                }else listeSAS = [];
                promiseRefreshSAS = $timeout($this.RafraichirSAS, 3000);
            })
            .catch(function(error)
            {
                console.error("Error :", error);
                promiseRefreshSAS = $timeout($this.RafraichirSAS, 7000);
            });
    };





});

当我使用路线加载页面时:

.when('/listeSAS', {
                templateUrl : './includes/sas/liste_sas.html',
                controller  : 'ListeSASController',
                controllerAs : 'controller'
            })

一切正常,如果我的数据在服务器上发生变化,它会在UI上更新,我的UI也会显示我想要的内容。一切都很好,除了当页面加载时我得到以下错误:

TypeError: undefined is not a function
    at file:///includes/libs/angular.js:14305:28
    at completeOutstandingRequest (file:///includes/libs/angular.js:4397:10)
    at file:////includes/libs/angular.js:4705:7 

是角度的函数“超时”,而行14305是:

try {
          deferred.resolve(fn());
        } catch(e) {
          deferred.reject(e);
          $exceptionHandler(e);
        }
        finally {
          delete deferreds[promise.$$timeoutId];
        }

为什么angular会抛出此异常?我做错了什么 ? 要知道: 在我的登录页面上,我设置了2个超时,我没有停止,因为它们刷新了“全局”变量,例如私人消息的数量。尽管出现错误,但超时仍然有效。

我在我的应用程序中使用node webkit,当我打开这条路线时(5-10秒后),它可能会有三次崩溃。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你是否正在调用RafraichirSAS(),它返回undefined而不是传入函数?

例如,而不是

$timeout(RefreshSASServices.RafraichirSAS(), 100);

待办事项

$timeout(RefreshSASServices.RafraichirSAS, 100);