2012-01-12 46 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 2012-01-12 13:40:44

+0

您可以設置一個計時器來每隔幾秒輪詢一次狀態並設置一個狀態變量。那麼你的訪問者仍然可以是同步的。 – weltraumpirat 2012-01-12 14:53:55

1

不是,沒有。 Flash在一個線程中運行,並且每個函數都必須在事件等被調用之前完成。

其中一種解決方案是返回三個值; 「是」,「否」和「待定」。如果它正在等待loggedIn() - 方法將開始檢查,並且該方法的客戶端應該稍後再檢查一次。

另一種方法是讓loggedIn方法將答案發送給回調。例如, 「getLoggedInStatus(回調:功能)」

相關問題