2016-09-22 82 views
1

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

如果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()來定義一個成功的回調函數。

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

就是這樣。謝謝。儘管如此,我確實需要做一些小改動。我認爲它應該是'return $ q.when(JSON.parse(sessionStorage [「isAdministrator」]));'注意返回。 – crowhill

+0

無需返回 –

+0

如果我沒有返回,我會得到「TypeError:無法讀取屬性',然後'未定義。」從我對局勢的有限理解出發,我認爲這是有道理的。 'user.isAdmin()。然後(函數(響應)'期待一個承諾。沒有返回,沒有一個。 – crowhill

相關問題