JSDeffered - это круто: https://github.com/cho45/jsdeferred/blob/master/test-jsdeferred.js
мы можем написать простейшую цепочку асинхронных вызовов.
next(function () { // this `next` is global function alert("1"); }). next(function () { // this `next` is Deferred#next alert("2"); }). next(function () { alert("3"); });
наш код такой спагетти-код, как этот new Execute1(nextFunction); ....
new Execute1(nextFunction); ...
есть ли какая-нибудь классная отложенная библиотека в ActionScript?или какой скрипт вы используете?
Я только что сталкивался с этим:
https://github.com/CodeCatalyst/promise-as3
Я еще не пробовал, но выглядит ... многообещающе.Он создан по образцу отложенного jQuery, соответствует спецификации CommonJS Promise / A (я полагаю) и имеет приличный набор модульных тестов.
Очень просто создать этот синтаксис самостоятельно. Каждая функция должна возвращать экземпляр самого класса (возвращать это).
Создайте класс as3 с именем Chainer
package { public class Chainer { public static function create():Chainer { return new Chainer(); } public function next(func:Function, ...rest):Chainer { func.call(this, rest); // call the function with params return this; // returns itself to enable chaing } } }
Теперь используйте класс с вашей следующей функцией. Вы можете назвать это так:
Chainer.create() .next(function():void { trace("1") } ) .next(function():void { trace("2") } );
Могут возникнуть проблемы, если вы хотите расширить класс Chainer, поскольку вы не можете изменить тип возвращаемого значения: ООП проблема: расширение класса, переопределение функций и jQuery-подобный синтаксис
Я использовал этот тип кода для создания небольшого вспомогательного класса: http://blog.stroep.nl/2010/10/chain-tween/ http://blog.stroep.nl/2009/11/delayed-function-calling-chain/
Кстати, эта библиотека анимации движения также основана на синтаксисе jQuery: http://code.google.com/p/eaze-tween/
Я не уверен, что это то, что вы ищете, но здесь есть довольно хороший порт LINQ для AS3: https://bitbucket.org/briangenisio/actionlinq/wiki/Home
Я думаю, что большинство твининговых библиотек будут делать именно то, что вы просите.Например, TweenLite и TimelineLite (https://www.greensock.com/timelinelite/) должны отлично выполнять эту работу.