Если события запускаются синхронно , вы можете сделать что-то простое:
var fArray:Array = [f1, f2, f3];
fArray.forEach(function(item:Function, i:int, a:Array):void {
item();
});
Выше будет работать, если функции синхронны.Поскольку порядок выполнения гарантирован.
С другой стороны, если ваши функции могут быть асинхронными , вам необходимо использовать либо события, сигналы, либо обратные вызовы.
Я вероятно использовал бы обратные вызовы для этого.Смотрите пример ниже.Жаль, что вы не можете расширить класс Function, но он был помечен как финальный.В любом случае, в этом примере fManager вызывается один раз в начале, чтобы запустить его, и делает все остальное автоматически.Каждый раз, когда функция выполняется, она вызывает fManager со ссылкой на себя, поэтому ее можно удалить из списка.
var fArray:Array = [f1, f2, f3];
function fManager(_f:Function = null) {
// Remove the one that just finished
if(_f !== null) {
fArray.splice(_f, 1);
}
// Run the next one
if(fArray.length > 0) {
// sends in function manager
fArray[0](arguments.callee);
}
}
function f1(f:Function):void {
trace("f1");
// Captures the current function
fManager(arguments.callee);
return;
}
function f2(f:Function):void {
trace("f1");
// Captures the current function
fManager(arguments.callee);
return;
}
function f3(f:Function):void {
trace("f3");
// Captures the current function
fManager(arguments.callee);
return;
}
// Start the code
fManager();