如何使用NetConnection取消AMF呼叫?

时间:2012-05-28 04:21:17

标签: actionscript-3 flex amf netconnection

假设我在Singleton模式中有一个NetConnection对象,它在我的所有应用程序中与所有数据访问对象类共享。现在,你进入了一个屏幕并要求加载5千条记录,因为你想搜索一些错误或其他什么。但是现在你刚刚意识到你在错误的屏幕上,而你实际上想要来自另一个“实体”的5千条记录。如何防止您必须等待近2分钟,直到数据到达此处,以便您可以转到另一个屏幕并询问一些不同的数据?我尝试使用ESC按钮作为NetConnection.close()事件的键调用者,但它实际上不起作用。它只是调度一个空事件,然后调用仍然返回。我知道我不能要求服务器不要继续做他的工作,但我想知道如何确保在你按下ESC或类似的东西后,ActionScript将不再打扰那个特定的调用你可以继续你的生活。并且,当服务器响应该呼叫时,在后台,我将把它丢弃,因为你已经同意取消它。

Ps。:我对如何收听ESC按钮并通过它调用一些方法没有任何疑问,我只想知道一旦用户决定不再接收该数据就应该调用什么并且他/她想继续前进而无需关闭应用程序并再次打开。

编辑:

我试图在拨打电话后销毁Responder对象,但它没有用。

        public function call(command:String, f:Function, fault:Function, ...parameters):void{
        var r:Responder = new Responder(f, fault);
        this._Responder = r;
        if(parameters.length == 0)
            GATEWAY.call(command, _Responder);
        else
            GATEWAY.call(command, _Responder, parameters);
    }

    public function close():void{           
        _Responder = new Responder(function(obj:Object):void{}, function(obj:Object):void{});
        //_Responder = null;
        trace("Canceled");
    }

使用此处描述的代码,我停止调用NetConnection::call并开始调用我编写的“调用函数”。所以这个函数会构建一个响应者,它将在类范围内,所以即使在调用完成后我也可以访问它,并且ESC按钮会调用“关闭”函数。我尝试将其设置为null并重新构建它。它没用。 我认为在NetConnection拨打电话后,无法更改响应者。

1 个答案:

答案 0 :(得分:0)

NetConnection类不支持取消AMF调用。但是,就像shaunhusain所说,你可以保留从你的单例类中调用的方法的存储(数组,字典等),一旦你取消一个调用,它应该只为那个调用禁用结果事件监听器。

因此,即使你退出等待AmfCall结果的模块,你的单例类也不会有回调,你可以继续下一个屏幕。

public class Call
{
var responder:Responder;
var service:String;
var params:Array;

public function Call(service:String, params:Array)
{
   responder = new Responder(this.onResult, this.onFault);
   this.service = service;
   this.params = params;

}

public function removeListeners():void
{
   removeEventListener(CallEvent.RESULT, onResult);
}

public function onResult(result:Object):void
{
   this.result = result;
   dispatchEvent(new CallEvent(CallEvent.RESULT, callId, result));
}

}

Call类负责在接收结果时调度事件。但是,如果没有事件侦听器,则任何类都不会侦听调度的事件。

此代码段取自AmfPhpToolBox。您可能希望使用该库来解决所有这些问题。

AMFPHPToolBox