TypeError:Object在AngularJs app

时间:2017-04-10 07:14:39

标签: javascript angularjs

我在IE中收到此错误:“ TypeError:对象不支持属性或方法'然后'”,在我的AngularJs控制器中调用的以下函数中:

GetUserAccessService.checkForValidHashPeriod()
    .then(function (result) {
        if (result === 'false') {
            GetUserAccessService.returnUserHashAuthentication();
        }
    });

这是我的AngularJs服务中调用的GetUserAccessService.checkForValidHashPeriod函数:

this.checkForValidHashPeriod = function () {
    var result;
    var now = new Date().getTime();
    if ($sessionStorage.userAuthenticationTokenDate !== null && $sessionStorage.userAuthenticationTokenDate !== undefined) {
        var timeDiff = now - $sessionStorage.userAuthenticationTokenDate;
    }
    if (angular.isUndefined($sessionStorage.userAuthenticationToken) || timeDiff > 1500000) {
        result = false;
    }
    else {
        result = true;
    }
    var stringResult = result.toString();
    return stringResult;
};

使用.then来电,我做错了什么?

3 个答案:

答案 0 :(得分:1)

下面的函数调用必须更改,因为你的方法将返回一个字符串,不能在这里使用'then'

Var someString = GetUserAccessService.checkForValidHashPeriod()
    if (someString === 'false') {
        GetUserAccessService.returnUserHashAuthentication();
    }

答案 1 :(得分:-1)

如果您打算在IE中使用promises,可以尝试使用bluebird lib来处理与旧浏览器的兼容性。

答案 2 :(得分:-1)

如果其他人有同样的问题,这里有一个替代答案(也就是说,这是我最终使用的方法),基于Phil的评论和帮助:

this.checkForValidHashPeriod = function () {
    var result = $q.defer();
    var now = new Date().getTime();
    if ($sessionStorage.userAuthenticationTokenDate !== null && $sessionStorage.userAuthenticationTokenDate !== undefined) {
        var timeDiff = now - $sessionStorage.userAuthenticationTokenDate;
    }
    if (angular.isUndefined($sessionStorage.userAuthenticationToken) || timeDiff > 1500000) {
        result.resolve(false);
    }
    else {
        console.log('Hash is valid.')
        result.resolve(true);
    }
    return result.promise;
};

是的,我知道这可能是对promises$q的不必要使用,但我喜欢这种方法,并与我的其余服务内联。