2011-06-29 60 views
0

我想派遣一个活动,但不知道什么时候该做,以获得正确的结果。第一个事件“submitClicked”是在正确的位置,并且效果很好。但是,第二个事件“dataReady”似乎可能是一个问题。在移动到下一行之前,AS3是否等待函数中的每行代码执行?

我需要它在this.compiledFormData设置后分派。 在移动到下一行之前,AS3是否等待函数中的每一行代码被执行?

// -------------------------------------------------------------------- 
    public function submitForm() 
    { 
     //dispatch an event 
     var cEvt:FormRendererEvent = new FormRendererEvent("submitClicked"); 
     cEvt.customMessage = "Started Submitting Form Data"; 
     dispatchEvent(cEvt); 

     this.compiledFormData = JSON.encode(this.compileFormData()); 

     var cEvt:FormRendererEvent = new FormRendererEvent("dataReady"); 
     cEvt.customMessage = "Data is ready to be used"; 
     dispatchEvent(cEvt); 

    }//end function 

回答

2

是的,在AS3中,每行必须在下一行可以运行之前完成。当你派遣事件时,他们会去做自己的事情。因此,您的“主要”代码可能会完成,同时您的调度事件仍可能正在处理中。

+0

所以......在一个函数中,代码依次运行以等待每行完成,然后再转到下一行。但是当你在一个函数中间派发一个事件时,它将继续像正常一样运行当前函数,并且同时开始运行与派发事件相关的任何函数。那是对的吗?所以你可以同时执行两个或更多的函数? – zechdc

+0

是的,任何数量的事件都可以在后台处理。 @Marplesoft是对的,'this.compiledFormData = ....'会同步运行,而你的分派事件将在后台异步运行。 – BumbleB2na

0

每行代码按顺序执行yes,但调用的API的实现是否执行异步操作取决于您调用的API。

在这种情况下JSON.encode是一个同步操作,因此将在执行下一行代码之前完全完成。

+0

如何确定它是同步还是异步? – zechdc

+0

运行JSON.encode时,它被认为是同步的。但是如果该函数派发了一个事件,那么它将被认为是异步的,正确的?但是,同步或异步的JSON.encode不应该影响我上面发布的代码,对吗? – zechdc

+0

从一般意义上说,它取决于方法。在你的例子中,你是对的。但你真的需要阅读文档。 – Marplesoft

相关问题