出于某种原因,按照这篇文章在我尝试的时候完全无法工作。

public function testWhatever():void {
    var cont:EventDispatcher = new EventDispatcher();
    cont.addEventListener("continue", addAsync(verifyFirst, 1000));
    cont.dispatchEvent(new Event("continue"));
}

private function verifyFirst(e:Event):void {
    var cont:EventDispatcher = new EventDispatcher();
    cont.addEventListener("continue", addAsync(verifySecond, 1000));
    cont.dispatchEvent(new Event("continue"));
}

private function verifySecond(e:Event):void {
    assertTrue(true);
}

如果我运行此测试,则会调用verifyFirst,但verifySecond不会。我假设这是flexunit中的一个错误......是否有解决方法?

有帮助吗?

解决方案

我做了更多研究,发现这确实是flexunit中的一个错误,它看起来像是已修复在下一个版本中。我找到的解决方法是使用 Application.application.callLater 来调度第二个事件。

private function verifyFirst(e:Event):void {
    var cont:EventDispatcher = new EventDispatcher();
    cont.addEventListener("continue", addAsync(verifySecond, 1000));
    Application.application.callLater(cont.dispatchEvent,
       [new Event("continue")]);
}

这个问题的灵感来自于在处理完Flash事件队列中的所有事件后检查对象状态的尝试。我发现了一种更简单的方法来实现这一点,而不会弄乱 EventDispatcher

当您希望处理事件队列时,请在测试的第一部分结束时进行以下调用。

Application.application.callLater(addAsync(phaseTwo,1000,[ args ... ]),[null]);

phaseTwo 函数具有以下签名。

private function phaseTwo(e:Event,args:Array):void

e 将传递 null 对象。这与 addAsync 兼容是必要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top