我班上有一个简单的访问者:
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
}
有没有办法可以在不退出访问者的情况下执行此异步请求?
答案 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,专注于异步作业。