簡體   English   中英

布爾值在Flash中為true,但在Javascript中為false

[英]Boolean is true in Flash, but false in Javascript

我在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變量為true,但是return b最終為false:

這是我用來調用Flash函數的JavaScript:

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

然后打開一個消息框,顯示false ,而flash文件顯示true

這是怎么回事? 我該如何解決它,以便我的函數返回與reply相同的值?

發生這種情況是因為響應器中的匿名函數是異步執行的。

當您的checkFile()函數返回b時,其值仍為false 最終,您的匿名函數被執行並且b設置為true ……但是在這種情況下為時已晚,因為您的checkFile()函數已經返回了false

要變通解決此問題,您可以考慮以略有不同的方式執行此操作:

當您執行匿名函數時,請使用異步響應將其調出至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函數,並為其提供了異步操作的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM