Flex中的异步函数调用

Abd*_*aly 15 apache-flex actionscript asynchronous actionscript-3

是否可以在Flex中异步调用函数?我想定期解析文件而不会阻塞应用程序的其余部分,建议的方法是什么?

Mat*_*est 19

Actionscript不支持多线程,我认为这就是你在这里真正要问的问题.

虽然功能不是actionscript(或Flex)中固有的功能,但您可以使用事件和计时器设置模拟系统.

我对你的确切问题有点不清楚,所以我会给出两个答案:

1)您希望每隔几秒处理一个文件以对任何更改进行操作.

在这种情况下,您需要做的就是设置一个定时器来定期检查文件:

var fileTimer:Timer = new Timer(5000);
fileTimer.addEventListener(TimerEvent.TIMER, checkFile);

...

private function checkFile(event:TimerEvent):void {
  // read the file and do whatever you need to do.
}
Run Code Online (Sandbox Code Playgroud)

2)您想要解析一个非常大的文件,但不希望应用程序在执行时挂起.

如果你想在后台处理文件,同时保持主应用程序的响应,那么我可能会创建一个函数来解析文件的几行,然后发送一个事件并返回.监听事件并启动一个等待几毫秒的计时器,然后再次调用该函数来解析下一组行.

这会破坏大文件的解析,并有足够的停机时间来保持应用程序的其余部分顺利运行.您必须使用计时器间隔和要一次解析的行数来实现响应性和解析文件所需时间之间的良好平衡.

希望有道理!


Mat*_*ard 9

最简单的答案是使用callLater例程 - 请参阅此处的一些文档.

callLater( parseFile, [filename] );

...

public function parseFile( filename : String ) : void
{
    // parse the file
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用包中setTimeout定义的调用flash.utils.这个允许您在经过指定的时间后调用例程.使用此例程,您可以将parseFile函数设置为重复调用自身,为您提供所需的定期间隔:

parseFile( filename );

...

public function parseFile( filename : String ) : void
{
    // parse the file

    // call this function again in 5 seconds
    setTimeout( parseFile, 5000, filename );
}
Run Code Online (Sandbox Code Playgroud)