Check to see if CallResponder is processing

Posted by Travesty3 on Stack Overflow See other posts from Stack Overflow or by Travesty3
Published on 2012-04-11T17:26:38Z Indexed on 2012/04/11 17:28 UTC
Read the original article Hit count: 239

Filed under:
|

I'm using Flash Builder 4.6. As a simple example, say I have the following application:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:sdk="services.sdk.*">
    <fx:Script>
        <![CDATA[
            private function btnGetValue_clickHandler():void
            {
                getValueResult.token = sdk.getValue();
            }

            private function getValueResultHandler():void
            {
                // ...
            }
        ]]>
    </fx:Script>
    <fx:Declarations>
        <sdk:SDK id="sdk" fault="{Alert.show(event.fault.faultString +'\n\n'+ event.fault.faultDetail, 'SDK ERROR');}" showBusyCursor="false"/>
        <s:CallResponder id="getValueResult" result="getValueResultHandler()"/>
    </fx:Declarations>
    <s:Button id="btnGetValue" click="btnGetValue_clickHandler()" label="Get Value" />
</s:Application>

So when you click on the button, it calls a PHP file and when it gets a result, it calls getValueResultHandler(). Easy enough.

But what if the response from the PHP file takes a second or two and the user clicks the button rapidly? Then the result handler function may not get called every time, since the call responder gets a new token before it received the last response.

Is there a standard way of resolving this issue? I came up with the following workaround, and it works fine, but it seems like this issue would be common enough to have a more built-in solution.

My workaround is:

var getValueResultProcessing:Boolean = false;

private function btnGetValue_clickHandler():void
{
    var interval:uint = setInterval(function():void
    {
        if (!getValueResultProcessing)
        {
            getValueResultProcessing = true;
            getValueResult.token = sdk.getValue();
            clearInterval(interval);
        }
    }, 100);
    getValueResult.token = sdk.getValue();
}

private function getValueResultHandler():void
{
    getValueResultProcessing = false;
    // ...
}

Any better way of resolving this issue?

© Stack Overflow or respective owner

Related posts about flex

Related posts about callresponder