2016-09-22 3 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 : 속성을 읽을 수 없습니다. '가'정의되지 않았습니다. '라는 메시지가 나타납니다. 상황에 대한 나의 제한된 이해에서가는 것, 나는 그것이 합리적이라고 생각합니다. – crowhill

관련 문제