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库? 或者你使用的是哪个脚本?
答案 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