2012-01-12 2 views
2

내 수업 시간에 간단한 접근이 :접근 자 내에서 비동기 작업을 어떻게 수행해야합니까?

public function get loggedIn():Boolean 
{ 
    var loggedIn:Boolean = somePrivateMethodToCheckStatus(); 
    return loggedIn; 
} 

내가 지금 검사와 함께 일하고 있어요 API는 비동기 방식으로 상태를 로그인 :

API_Class.addEventListener(API_Class.LOGIN_STATUS,onStatusCheck); 
API_Class.checkLoginStatus(); 

function onStatusCheck(evt:API_Event):void 
{ 
    //evt.loggedIn == true or false 
} 

나는이 비동기을 수행 할 수있는 방법이 있나요 내 접근자를 종료하지 않고 요청 하시겠습니까?

답변

2

간단한 대답 : 아니요, 없습니다. 비동기 방식으로 로그인 확인을 설정해야합니다.

약간 궁금합니다. 원격으로 로그인 상태를 반복적으로 폴링해야하는 이유가 무엇입니까? 사용자가 Flash 응용 프로그램 내에서 로그인 한 경우 상태를 알고 있어야합니다. 로그 아웃 할 때도 마찬가지입니다. 로그인 및 로그 아웃이 Flash 앱 외부에서 처리되는 경우 JavaScript 또는 소켓 연결을 통해 알림 메커니즘을 구현하지 않는 이유는 무엇입니까?

또한 로그인하지 않으면 사용자가 서버에서 작업을 수행 할 수 없도록하려는 경우 원격 호출이있을 때마다 서버에 대한 인증 을 확인하고 세션이 만료되면 오류를 반환 할 수 있습니다. 이것은 반복적으로 상태 정보를 폴링하는 것보다 더 효율적입니다.

+0

사용자는 Flash 앱 외부에서 잠재적으로 로그인 및 로그 아웃 할 수 있습니다. Flash 앱 이외의 기능은 제어 할 수 없으며 현재 (몇 초 내에) 로그인 상태를 반영해야합니다. 내가 새로이 비동기 동작을 제대로 처리하기 위해 클래스를 다시 작성해야 할 것입니다. – shanethehat

+0

몇 초마다 상태를 폴링하고 상태 변수를 설정하도록 타이머를 설정할 수 있습니다. 그렇다면 접근자는 여전히 동기식 일 수 있습니다. – weltraumpirat

1

아니요. Flash는 단일 스레드에서 실행되며 이벤트가 호출되기 전에 모든 함수가 완료되어야합니다.

하나의 솔루션은 세 가지 값을 반환하는 것입니다. "예", "아니오"및 "보류 중"입니다. 보류 중이면 loggedIn() - 메서드는 검사를 시작하고 해당 메서드의 클라이언트는 잠시 후에 다시 확인해야합니다.

또 다른 방법은 loggedIn-method가 응답을 콜백에 보내는 것입니다. 예 : "getLoggedInStatus (콜백 : 함수)"

관련 문제