Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3:事件发生后从另一个函数返回值_Actionscript 3_Function_Flash_Actionscript_Return - Fatal编程技术网

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

Actionscript 3 AS3:事件发生后从另一个函数返回值,actionscript-3,function,flash,actionscript,return,Actionscript 3,Function,Flash,Actionscript,Return,基本上,我想检查使用AMF的数据库中是否存在用户(这很好!)。但是,我想将布尔值返回到另一个函数(在另一个类中),该函数最初称为“checkUserExistance”函数。但是,由于数据库连接不是immidate,因此此函数将始终返回一个假值(即使“result”为true)。因此,我希望返回行位于“onUserChecked”函数内,但这当然会给我一个错误。我想我可以创建一个eventListener,但是,“return userExists”行也必须在另一个函数中,这不起作用。。。我能做

基本上,我想检查使用AMF的数据库中是否存在用户(这很好!)。但是,我想将布尔值返回到另一个函数(在另一个类中),该函数最初称为“checkUserExistance”函数。但是,由于数据库连接不是immidate,因此此函数将始终返回一个假值(即使“result”为true)。因此,我希望返回行位于“onUserChecked”函数内,但这当然会给我一个错误。我想我可以创建一个eventListener,但是,“return userExists”行也必须在另一个函数中,这不起作用。。。我能做什么

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
*/

是的,我知道这个问题(正如我在我的文章中所说的)。但这不是我真正的问题。即使我添加了一个事件处理程序,该处理程序也会将您指向一个函数,对吗?(我不太擅长这里的术语;-)-->然后我遇到了同样的问题,因为“returnuserexists”不可能在另一个函数中。我知道这一定很容易修复,但我在上面找不到任何东西。我已经找了一个小时烤箱了,格蕾特!在这个答案的帮助下,我终于找到了答案。但是使用了我自己发布的前一个问题的大部分代码。哈哈我认为最大的问题是我已经在另一个类中编写了if语句,这真的很愚蠢。这一切都把我搞糊涂了。不过现在它成功了,谢谢你让我回到正轨。不用担心,我很高兴这有帮助。跟上好的设计模式,一切都会好起来;)