2009-08-11 2 views
0

Как прослушать функцию завершения функции?Завершение функции ActionScript 3.0 Слушатель событий

скажем, у меня есть этот ProcessFileфункцию, которая запускается в конструкторе класса с другим слушателем событий.

private function processFile(e:event):void 
{ 
//do whatever is this function suppose to do 
} 

теперь я хочу listnen для его завершения

Когда я использую

processFile.addEventListener(Event.Complete, anotherCoolFunction);

Я получаю Errorr

Error: 1061 posssibly undefined method AddEventListener through a stati type function

+0

Существует общий случай в вопросах программирования, в которых человек спрашивает «Как мне сделать * D *». Проблема в том, что они не дали * A * -> * B * -> * C * -> * D *.Есть что-то *, которое вы пытаетесь сделать, и я заверяю вас, что передача вещания нескольким объектам для объявления прекращения функции * не означает, что вы хотите сделать. Постарайтесь объяснить, что вы на самом деле пытаетесь сделать? –

ответ

3

Ya ... нет :)

Вы можете слушать только канун nts на объектах, которые реализуют интерфейс IEventDispatcher, такие как Sprite или MovieClip, или EventDispatcher.

Есть несколько решений, доступных вам, но вы можете просто вызвать следующую функцию после вызова processFile. Когда вы вызываете функцию, следующая строка не будет выполняться до ее завершения. поэтому в следующем сценарии:

processFile(); 
anotherCoolFunction(); 

Вы можете быть уверены, что anotherCoolFunction никогда не будет выполняться, пока ProcessFile не будет завершена.

Надеюсь, что это поможет.

Тайлер.

+0

Я надеялся на более сложный способ справиться с этим. Так что последняя строка. –

+1

«Утонченность» в простоте. –

1

То, что вы пытаетесь сделать, невозможно с помощью addEventListener. Функции не являются подклассами класса EventDispatcher (базовый класс, который предоставляет метод addEventListener).

Я не понимаю, почему вы хотели бы сделать что-то подобное этому. Если у вас есть функция, и вы хотите знать, когда это делается, просто поместите anotherCoolFunction() непосредственно после вызова processFile().

Если processFile() вызывается как ответ на прослушиватель событий, просто поместите вызов anotherCoolFunction() в последнюю строку processFile().

1

Функциональный процесс синхронный, поэтому последняя строка вашей функции указывает, что она завершена. Вы можете напрямую вызвать другую функцию или сделать dispatchEvent() (вам нужно расширить EventDispatcher, поэтому вы получите сообщение об ошибке;)).

+0

Проблема в том, что если вы находитесь в последней строке функции, вы все равно выполняете эту функцию. Таким образом, функция еще не закончена, и это то, что запросил OP ... –

0

Я бы прослушивал dispatchEvent(), который находится на последней строке функции, поэтому вам нужно будет сделать класс в расширенном Sprite или MovieClip. К моменту обработки события функция будет завершена. Если вы вызываете другую функцию из функции processFile, она не будет завершена, так как она все еще находится в стеке вызовов.

3
class SomeClass 
{ 
    public function SomeClass() 
    { 
     this.addEventListener("fileProcessComplete", anotherCoolFunction); 

     processFile(); 
    } 

    private function processFile():void 
    { 
     //do whatever is this function suppose to do 
     dispatchEvent(new Event("fileProcessComplete")); 
    } 

    private function anotherCoolFunction(evt:Event):void 
    { 
     //do whatever is this function suppose to do 
    } 
} 
1

Джереми подход является правильным .. Вы также могли бы сделать что-то вроде этого, если вы не хотите использовать «слушатели»

class SomeClass 
{ 
    public function SomeClass() { 
     var obj = this; 
     this.processFile(function(){ 
      obj.anotherCoolFunction(this); 
     }); 
    } 
    private function processFile(method:Function):void 
    { 
     //do whatever is this function suppose to do 

     method.apply({some_var_name: 'hello'}); 
    } 

    private function anotherCoolFunction(data):void 
    { 
     //do whatever is this function suppose to do 

     trace(data.some_var_name) // => 'hello' 
    } 
} 
+0

Я никогда не видел использования функции таким образом. Я должен буду помнить, что в будущем - это, вероятно, окажется полезным. –

Смежные вопросы