处理返回可能(或可能不)异步的函数

时间:2016-09-22 04:04:07

标签: angularjs

我有以下功能。它不起作用,但想法是如果已设置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;
});

1 个答案:

答案 0 :(得分:1)

如果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()函数将始终返回一个promise。所以你可以使用.then()来定义一个成功的回调。

user.isAdmin().then(function(response) {
    vm.test = response.data;
});