我应该如何在访问器中执行异步操作?

时间:2012-01-12 12:05:40

标签: actionscript-3 asynchronous accessor

我班上有一个简单的访问者:

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
}

有没有办法可以在不退出访问者的情况下执行此异步请求?

3 个答案:

答案 0 :(得分:2)

简单回答:不,没有。您必须以异步方式设置登录验证。

我有点好奇:为什么需要远程重复轮询登录状态?如果您的用户从Flash应用程序中登录,则应该知道状态。退出也是如此。如果从Flash应用程序外部处理登录和注销,为什么不实现通知机制(通过JavaScript或套接字连接)?

此外,如果没有登录,则会阻止用户在服务器上执行操作,无论何时进行远程调用,都可以检查服务器上的授权 ,如果会话已过期则返回错误。这仍然比重复轮询状态信息更有效。

答案 1 :(得分:1)

不是,不。 Flash在单个线程中运行,并且每个函数都必须在调用事件等之前完成。

一种(某种)解决方案是返回三个值; “是”,“否”和“待定”。如果它挂起了loggedIn() - 方法将开始检查,该方法的客户端应该在一段时间内再次检查。

另一种方法是让loggedIn方法将回复发送给回调。例如“getLoggedInStatus(callback:Function)”

答案 2 :(得分:0)

您可能对http://www.as3commons.org/as3-commons-eventbus/index.html感兴趣 它是一个方便的lib,专注于异步作业。