布尔值在Flash中为true,但在Javascript中为false

时间:2013-07-25 19:53:32

标签: javascript actionscript-3 flash

我在Flash中有这个功能:

public function checkFile(file:String):Boolean{
                var b:Boolean;
                var responder:Responder = new Responder(function(reply:Boolean):void{
                    b=reply;
                    msg("vid_"+file+".flv "+ "exists? " + reply);
                    setState("ready");
                    status = "ready";
                },
                    function(res:Object):void{
                        trace("checkFile call failed");
                    });
                mync.call("checkFile",responder,"vid_"+file);
                return b;
            }

我可以确认reply变量为真,但return b最终为假:

这是我用来调用flash函数的javascript:

function checkFile(){
   alert(thisMovie("vidRecorder").checkFile(currentVid));           
}

这会打开一个消息框,显示false,而flash文件会显示true

发生了什么事?如何修复它以使我的函数返回与reply相同的值?

1 个答案:

答案 0 :(得分:1)

这是因为响应程序中的匿名函数是异步执行的。

当您的checkFile()函数返回时,b的值仍为false。最终,您的匿名函数已执行且b设置为true ...但在这种情况下为时已晚,因为您的checkFile()函数已返回false。< / p>

要解决此问题,您可能会考虑以稍微不同的方式执行此操作:

执行匿名函数时,请使用异步响应调用javascript。像这样:

public function checkFile(file:String):void {
    var responder:Responder = new Responder(function(reply:Boolean):void{
        msg("vid_"+file+".flv "+ "exists? " + reply);
        setState("ready");
        status = "ready";
        ExternalInterface.call('someJavascriptFunction', reply);
    },
    function(res:Object):void{
        trace("checkFile call failed");
    });
    mync.call("checkFile",responder,"vid_"+file);
    // note we no longer return a value here
}

在上面的代码中,我们调用一个新的Javascript函数并为它提供异步操作的结果。