![](/img/trans.png)
[英]Javascript boolean true turns false, false does not turn true
[英]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.