使此函数返回值的方法是什么?

时间:2015-10-04 19:20:01

标签: javascript ajax angularjs asynchronous

我有以下服务代码:

function (Api) {
    var user = null;
    return {
        checkUser: function() {
            Api.checkAuth().then(function(userObj) {
                user = userObj;
            })
        }, 
        isLogin: function() {
            this.checkUser();
            return !(user == null);
        }
    }
}

和app.js就是这样:

app.run(AuthInfo) {
    log(AuthInfo.isLogin());
    if (AuthInfo.isLogin())....
}

问题是在控制台中我只能看到错误。 因为checkUser()函数工作异步,并且当isLogin()返回用户异步请求时没有完成。 如何编辑我的代码以使用它,我需要在ng-show和其他服务和控制器中使用AuthInfo.isLogin()

1 个答案:

答案 0 :(得分:0)

checkUser 返回承诺,您必须在回调中检查用户是否存在:

类似的东西:

function (Api) {
    var user = null;
    return {
        checkUser: function () {
            return Api.checkAuth().then(function (userObj) {
                user = userObj;
            })
        }, 
        isLogin: function() {
            return this.checkUser().then(function () {
                return user !== null;
            });
        }
    }
}

AuthInfo.isLogin().then(...)

请注意,没有必要同时使用两种方法:

function (Api) {
    return {
        isUserLogged: function () {
            return Api.checkAuth().then(function (userObj) {
                return userObj !== null;
            })
        }
    }
}

AuthInfo.isUserLogged().then(...)