есть ли какая-нибудь крутая библиотека Deferred в ActionScript?

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); ....

есть ли какая-нибудь крутая библиотека Deferred в ActionScript? или Какой сценарий вы используете?


person freddiefujiwara    schedule 07.02.2011    source источник
comment
надеюсь на эту помощь   -  person komelgman    schedule 21.07.2011


Ответы (4)


Я только что наткнулся на это:

https://github.com/CodeCatalyst/promise-as3

Я еще не пробовал, но выглядит... многообещающе. Он смоделирован на основе jQuery Deferred, соответствует спецификации CommonJS Promise/A (я полагаю) и имеет приличный набор модульных тестов.

person darscan    schedule 14.02.2012

Создать этот синтаксис самостоятельно очень просто. Каждая функция должна возвращать экземпляр самого класса (вернуть это).

Создайте класс 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/

Кстати, эта библиотека tween также основана на синтаксисе, подобном jQuery:
http://code.google.com/p/eaze-tween/

person Mark Knol    schedule 07.02.2011

Я думаю, что большинство библиотек анимации сделают именно то, что вы просите. Например, TweenLite и TimelineLite (https://www.greensock.com/timelinelite/) должны отлично справляться со своей задачей.

person Axelle Ziegler    schedule 07.02.2011

Я не уверен, что это то, что вы ищете, но здесь есть неплохой порт LINQ для AS3: https://bitbucket.org/briangenisio/actionlinq/wiki/Home

person Cay    schedule 08.02.2011