Простая задачка: Имеем n функций. Как проще всего организовать последовательное выполнение функций? После выполнения первой функций запустилась вторая, после выполнения второй запустилась третья и тд. Т.е как устранить так называемые "гонки"? Пример:
benzema
Ну у меня есть несколько вариантов. Первая это последующую функцию вставить в предыдущую, то есть внутрь function1() вставить function2() и так далее (выполнение будет точно последовательным, т.к пока не выполнится предыдущая функция, последующая никак не сможет выполнится). Есть еще вариант с for, число увеличивать постоянно и получится что при каждом увеличении выполнится своя функция. В обоих случаях не должно быть гонки функций. Последний вариант это воспользоватся еще одним switch и при каждом выполнять свою функция, без использования break, они будут выполнятся по очереди. Возможно кто-то поможет разумнее способом
первый он выгоден, если небольшое количество функций, но у меня их много, да и это уже некрасивое программирование, хотя на войне все способы хороши) а вот второй можно подумать. Но всё равно в любом случае Спасибо)
Если у вас много функций, которые должны быть вызваны последовательно и вы не можете в конце каждой ставить вызов (не полное описание, а вызов) следующей - то это тоже некрасивое программирование. Хотя, как по мне, "тоже" тут не уместно, вызывать из функции другие - это нормально.
gpv123, я, возможно, вас не допонял. Но какой смысл их в массив запихивать и проходиться по ним из цикла? Мне нужно устранить "гонки", те организовать последовательное выполнение функций: Выполнилась 1 функция, запустилась вторая, выполнилась вторая, запустилась третья и тд. Задачка усложняется тем, что имеем множество функций, поэтому вызывать их друг из друга нерационально. Так что вот ищем панацею. Я думаю многие программисты сталкивались с данной проблемой. Поэтому предлагайте, свои варианты решения и выберем самый рациональный. Мне подсказали рыть в сторону callback, но на AS 3.0 я не сталкивался с ним.
ах да, у меня в функциях объект перемещается по сцене по таймеру. поэтому тут уместно говорить про гонки и нельзя функции написать друг за другом.
var arr:Array = [func1, func2, func3];for(var i:int = 0; i < arr.length; i++){ arr[i]();} function func1():void{ var mc:MovieClip; for (var i:int = 0; i < 1000; i++) { mc = new MovieClip(); addChild(mc); } trace(1);} function func2():void{ trace(2);} function func3():void{ trace(3);}
При условии, что в функциях нет асинхронности они будут выполняться одна за другой. Я специально для примера сделал первую функцию нагруженней остальных, с циклом создающим 1000 клипов.
Если же у вас есть асинхронность (например подгрузка внешних данных), то без колбеков или рассылки событий вам не обойтись.