0

假设我在单例模式中有一个 NetConnection 对象,它与我所有应用程序中的所有数据访问对象类共享。现在,您进入屏幕并要求加载 5 千条记录,因为您想搜索一些错误或其他什么。但是现在你才意识到你在错误的屏幕上,你实际上想要来自另一个“实体”的 5000 条记录。如何防止您不得不等待近 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 拨打电话后,无法更改响应者。

4

1 回答 1

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。您可能希望使用该库来解决所有这些问题。

AMFPHP工具箱

于 2012-05-28T07:50:23.547 回答