Angularjs 处理返回可能是(也可能不是)异步的函数

Angularjs 处理返回可能是(也可能不是)异步的函数,angularjs,Angularjs,我有以下功能。它不起作用,但是如果已经设置了sessionStorage变量,就使用它。如果没有,则调用API,然后为下次设置sessionVariable isAdmin: function() { // hit the first page, or refreshed. if(sessionStorage.getItem("isAdministrator") === null) { AzureGroupService.get({adGroup: "Progr

我有以下功能。它不起作用,但是如果已经设置了
sessionStorage
变量,就使用它。如果没有,则调用API,然后为下次设置
sessionVariable

isAdmin: function() {

    // hit the first page, or refreshed.
    if(sessionStorage.getItem("isAdministrator") === null) {
        AzureGroupService.get({adGroup: "Programmers"}).$promise.then(function (data) {
            sessionStorage["isAdministrator"] === data.isMember;
            return data.isMember;
        });
    }
    else {
        return JSON.parse(sessionStorage["isAdministrator"]);
    }
}
因此,函数可能会立即返回,或者可能需要等待API。这是不是接近正确的方法

如果是这样,我将如何在控制器中调用它?像这样的

user.isAdmin().then(function(response) {
    vm.test = response.data;
});
如果sessionStorage对象不为null,则可以使用$q.when()。您的isAdmin()函数应该如下所示

isAdmin: function() {

// hit the first page, or refreshed.
if(sessionStorage.getItem("isAdministrator") === null) {
    return AzureGroupService.get({adGroup: "Programmers"}).$promise.then(function (data) {
        sessionStorage["isAdministrator"] === data.isMember;
        return data.isMember;
    });
}
else {
    return $q.when(JSON.parse(sessionStorage["isAdministrator"]));
}
}
您的控制器应该是这样的,isAdmin()函数将始终返回一个承诺。因此,您可以使用.then()定义一个成功回调


就这样。谢谢不过,我不得不做一个小小的改变。我认为应该
返回$q.when(JSON.parse(sessionStorage[“isAdministrator”])注意返回。无需返回如果我不返回,我会得到“TypeError:无法读取未定义的'then'属性”。从我对情况的有限理解来看,我认为这是有意义的
user.isAdmin()。然后(函数(响应)
期望得到一个承诺。没有返回,就没有承诺。哦,我的错误。没有检查,我会编辑答案。我感谢答案。它真的很有帮助。
user.isAdmin().then(function(response) {
    vm.test = response.data;
});