1

ObjectA调用Mobject 的方法,B为两种情况传递两个回调:cbYescbNo.

B反过来,执行 Web 服务异步调用,C使用唯一的回调方法创建 Object (api) 实例NB. 此回调将决定调用两个回调中的哪一个。

我存储cbYescbNo用作 B 类型的私有变量Function

我怎样才能调用任何一个回调?他们不是 B 的孩子,所以语法B[cbYes]();不是办法。虚幻代码示例:

class A {
    public function Smth() {
        var instB:B = new B( cbYes, cbNo);
    }
    public function cbYes( e:Event) { doSomething(); }
    public function cbNo( e:Event) { doSomething(); }
}

class B {
    private var _cb1:Function;
    private var _cb2:Function;
    public function B( cb1, cb2) {
        _cb1 = cb1; _cb2 = cb2;
        var worker:C = new C();
        C.apiMethod123( cbAfterCall);
    }
    public function cbAfterCall( Result:*) {
        if( Result = 1) {
            // here I need to call callback from _cb1
        } else {
            // here I need to call callback from _cb2
        }
    }
}

class C {
    private var _Callback:Function;
    public function C() { }
    public function apiMethod123( cb:Function) {
        this._Callback = cb;
        // create a URLLoader or a Loader and do a web service call
    }
    public function urlCallback( e:Event) {
        // parse response
        this._Callback();
    }
}

好的,当我整理这个示例代码时,我意识到我已经用 api caller worker 解决了这个问题!:-) 要多睡觉。

AfterQuestion:这种架构方法看起来真的是错误的吗?请建议一种更好的模式,或者一种适合使用并发异步 API 调用的系统的模式。

4

1 回答 1

2

如果您将 cbYes 和 cbNo 作为成员变量存储在 B 中。您可以像普通函数一样调用它们:

public function foo(cbYes:Function,cbNo:Function):void
{
    this.cbYes = cbYes;
    this.cbNo = cbNo;
}

public function bar():void
{
    cbYes();
}

您可以使用事件系统来实现相同的结果,而不是使用这样的回调。您可以创建自定义事件并分派是/否事件。

于 2012-05-16T16:14:51.827 回答