AS3:事件发生后从另一个函数返回值



基本上我想检查一个用户是否存在于使用AMF的数据库中(这工作得很好!)但随后我想将布尔值返回给另一个函数(在另一个类中),该函数最初称为"checkuserexist"函数。但是,由于数据库连接不是即时的,因此该函数将始终返回false值(即使"result"为真)。所以我想有"onUserChecked"函数内的返回行,但这当然给了我一个错误。我想我可以创建一个eventListener,但是,"返回userExists"行也必须在另一个函数内,其中doesnät工作(?)…我能做什么?

public function checkUserExistance(username:String) {
    var responderBOOLEAN:Responder = new Responder(onUserChecked, onFault)
    var userExists:Boolean = false;
    connection.connect(gateway);
    connection.call("User.checkUser", responderBOOLEAN, username);
    connection.close();
    function onUserChecked(result:Boolean):void {
        userExists = result;
    }
    return userExists;
}

我很抱歉,但你正试图强制异步调用为同步调用,这是错误的。

看到

你应该学会如何用正确的方式处理事件。

这里唯一正确的答案是将userExists保存为成员变量,并在服务器返回响应时分派事件。客户端的东西应该类似于:

// add listener, ServerEvent is a custom event (see below)
server.addEventListener(ServerEvent.CHECK_RESPONSE, onCheckResponse);
server.checkUserExistance('username'); // start the query
function onCheckResponse(e:ServerEvent):void {
    if (e.userExists) {
    }
}

// inside server class
function onUserChecked(result:Boolean):void {
   userExists = true;
   dispatchEvent(new ServerEvent(ServerEvent.CHECK_RESPONSE, userExists));
}
/* ServerEvent is a custom class that extens Event
   Such classes are used so you can pass special properties in them
   via constructor (pass data, store it into member variable)
   and through getter for that variable.
   If you don't like it, simply add/dispatch Event.COMPLETE
   and use public property to get userExists from server
*/

最新更新