在下面的代码中,当我从另一个函数调用chkAuthentication函数时,在该函数中的剩余代码之后调用remoteObj.login(我的服务文件(.php)中的登录函数)。 ,在调用result-handler函数loginResult之前,从函数返回loginStatus。但我的loginStatus应该在loginResult函数中设置。似乎异步行为是罪魁祸首。
为了让loginResult函数首先完成,我该怎么做?
请帮帮我。谢谢。
private var loginStatus:Boolean;
public function chkAuthentication(loginVOObj:LoginVO):String{
remoteObj.login.addEventListener(ResultEvent.RESULT,loginResult);
remoteObj.login(loginVOObj);
if(loginStatus == true){
return displayName;
}
else{
return 'fail';
}
}
private function loginResult(result:ResultEvent):void
{
if(result.result == null){
loginStatus=false;
}else{
loginStatus=true;
}
}
答案 0 :(得分:2)
chkAuthentication方法不应返回String,因为它是异步的。相反,只需创建一个实例变量并在loginResult方法中设置其String值。然后,您可以使用绑定或调度事件来更新UI。
答案 1 :(得分:0)
之前的答案是正确的 - 而不是依赖于同步操作的服务,除了性能问题之外,在flex中是一种罕见的情况,您应该使用loginResult函数将登录状态存储在此对象或对象中您用来存储应用程序的状态。然后,使用数据绑定控件显示它:
<mx:label text={userStatus.loginDisplay} />