ActionScript中有没有很酷的Deferred库?

时间:2011-02-07 05:41:52

标签: actionscript-3 actionscript deferred

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");
});

我们的代码是如此spagetti代码  new Execute1(nextFunction); ...

ActionScript中有没有很酷的Deferred库? 或者你使用的是哪个脚本?

4 个答案:

答案 0 :(得分:4)

我刚看到这个:

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

我还没有尝试过,但看起来很有希望。它以jQuery的Deferred为模型,遵循CommonJS Promise / A规范(我假设),并且具有相当不错的单元测试集。

答案 1 :(得分:3)

自己创建这种语法非常简单。每个函数都应该返回类本身的实例(返回此内容)。

创建一个名为Chainer的as3类

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
        }
    }

}

现在使用带有next函数的类。你可以这样称呼它:

Chainer.create()
    .next(function():void { 
        trace("1") 
    } )
    .next(function():void { 
        trace("2") 
    } );

如果您想扩展Chainer类,可能会出现问题,因为您无法更改返回类型:
OOP problem: Extending a class, override functions and jQuery-like syntax

我使用这种类型的代码来创建一个小帮助类:
http://blog.stroep.nl/2010/10/chain-tween/
http://blog.stroep.nl/2009/11/delayed-function-calling-chain/

BTW这个补间库也基于类似jQuery的语法:
http://code.google.com/p/eaze-tween/

答案 2 :(得分:1)

我认为大多数补间库都会完全符合您的要求。例如,TweenLite和TimelineLite(https://www.greensock.com/timelinelite/)可以完美地完成工作。

答案 3 :(得分:1)

我不确定这是你想要的,但是这里有一个非常好的LINQ for AS3端口:https://bitbucket.org/briangenisio/actionlinq/wiki/Home