<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Second QueryTask Runs before First One Completes - How to Get Results from First in ArcGIS API for Flex Questions</title>
    <link>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83912#M1893</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I think you have to separate the complete function from the reusable code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Consider doing something like the below sample code..&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I did not test the code.. but it should help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;notice the "callBackFunction:Function" paramater... it would be your onQueryComplete function&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

private function FilterAttributeTablesByPolygon(poly:Polygon, strURL:String, callBackFunction:Function):void
{
 var querytaskFeaturesByPolygon:QueryTask = new QueryTask();
&amp;nbsp; querytaskFeaturesByPolygon.url = strURL;
 
 var queryFeaturesByPolygon:Query = new Query();
&amp;nbsp; queryFeaturesByPolygon.geometry = poly;
 
 querytaskFeaturesByPolygon.execute(queryFeaturesByPolygon,&amp;nbsp; new AsyncResponder(callBackFunction, faultFunction);
}

private function testquery()
{
 //FIRST CALL
 FilterAttributeTablesByPolygon(new Polygon(),"http://......", function(event:QueryEvent):void
 {
&amp;nbsp; var fs:FeatureSet = event.featureSet; 
&amp;nbsp; //......Handle results here
&amp;nbsp; 
&amp;nbsp; //SECOND CALL Called once first is completed...
&amp;nbsp; FilterAttributeTablesByPolygon(new Polygon(),"http://......", function(event:QueryEvent):void
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; var fs2:FeatureSet = event.featureSet; 
&amp;nbsp;&amp;nbsp; //......Handle results here
&amp;nbsp; });
&amp;nbsp; 
 });

}

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope that helps.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Drew&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 10 Dec 2021 23:13:09 GMT</pubDate>
    <dc:creator>Drew</dc:creator>
    <dc:date>2021-12-10T23:13:09Z</dc:date>
    <item>
      <title>Second QueryTask Runs before First One Completes - How to Get Results from First</title>
      <link>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83911#M1892</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi All,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In an effort to write reusable code, I wrote the function below that will query a feature layer (url paramater) by a polygon (poly parameter).&amp;nbsp; This way I don't need to have a separate query and actionscript block for each feature layer that I'll query.&amp;nbsp; The problem that will happen is that when the function is called multiple times in a row the second query will begin before the first one has completed because it's asynchronous.&amp;nbsp; At that point I'm not sure how to know which result is which.&amp;nbsp; I really want to avoid having to write a black of code for each specific query, but when I try to generalize it, like the example below, I'm running into the asynchonous issues.&amp;nbsp; Does any body have any ideas to handle this or a code example of a better way?&amp;nbsp; Is there a way I can understand which result is which?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chuck&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="plain" name="code"&gt;&amp;nbsp; private function FilterAttributeTablesByPolygon(poly:Polygon, strURL:String):void &amp;nbsp; { &amp;nbsp;&amp;nbsp; querytaskFeaturesByPolygon.url = strURL; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; queryFeaturesByPolygon.geometry = poly; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; querytaskFeaturesByPolygon.execute(queryFeaturesByPolygon); &amp;nbsp; }&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected function querytaskFeaturesByPolygon_executeCompleteHandler(event:QueryEvent):void &amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // highlight the selected features - NOT DONE &amp;nbsp;&amp;nbsp;&amp;nbsp; var fs:FeatureSet = event.featureSet; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; var attributes:Array = fs.attributes; &amp;nbsp;&amp;nbsp;&amp;nbsp; var al:ArrayList = new ArrayList(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for each (var objRec in attributes) &amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; al.addItem(objRec); &amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //code continues....&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 09 Jan 2013 13:15:17 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83911#M1892</guid>
      <dc:creator>chuckfrank</dc:creator>
      <dc:date>2013-01-09T13:15:17Z</dc:date>
    </item>
    <item>
      <title>Re: Second QueryTask Runs before First One Completes - How to Get Results from First</title>
      <link>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83912#M1893</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I think you have to separate the complete function from the reusable code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Consider doing something like the below sample code..&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I did not test the code.. but it should help.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;notice the "callBackFunction:Function" paramater... it would be your onQueryComplete function&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;

private function FilterAttributeTablesByPolygon(poly:Polygon, strURL:String, callBackFunction:Function):void
{
 var querytaskFeaturesByPolygon:QueryTask = new QueryTask();
&amp;nbsp; querytaskFeaturesByPolygon.url = strURL;
 
 var queryFeaturesByPolygon:Query = new Query();
&amp;nbsp; queryFeaturesByPolygon.geometry = poly;
 
 querytaskFeaturesByPolygon.execute(queryFeaturesByPolygon,&amp;nbsp; new AsyncResponder(callBackFunction, faultFunction);
}

private function testquery()
{
 //FIRST CALL
 FilterAttributeTablesByPolygon(new Polygon(),"http://......", function(event:QueryEvent):void
 {
&amp;nbsp; var fs:FeatureSet = event.featureSet; 
&amp;nbsp; //......Handle results here
&amp;nbsp; 
&amp;nbsp; //SECOND CALL Called once first is completed...
&amp;nbsp; FilterAttributeTablesByPolygon(new Polygon(),"http://......", function(event:QueryEvent):void
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; var fs2:FeatureSet = event.featureSet; 
&amp;nbsp;&amp;nbsp; //......Handle results here
&amp;nbsp; });
&amp;nbsp; 
 });

}

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope that helps.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Drew&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 23:13:09 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83912#M1893</guid>
      <dc:creator>Drew</dc:creator>
      <dc:date>2021-12-10T23:13:09Z</dc:date>
    </item>
    <item>
      <title>Re: Second QueryTask Runs before First One Completes - How to Get Results from First</title>
      <link>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83913#M1894</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Another approach might be to use the AsyncToken that comes back from the call to execute. If you grab that AsyncToken, you can add an event listener to it like this (here I'm using an HTTPService call, but it should work similarly for your Task):&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;var iCallId:int = 0;
var responderToken:Object = { callId : iCallId++ };
var asyncToken:AsyncToken = configService.send();
asyncToken.addResponder(new AsyncResponder(configResult, configFault, responderToken));&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And you can now put your result-handling logic in a different event listener, configResult(), which will be passed the token (type Object--anything you want) you sent in right after you made the request. You can add any kind of property you want to this token, including an incremental counter or unique ID for the call.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;More info:&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/rpc/AsyncToken.html" rel="nofollow noopener noreferrer" target="_blank"&gt;http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/rpc/AsyncToken.html&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Edit: Here's an example from Adobe, showing how to do the same thing in an even simpler way than I demonstrated above:&lt;/SPAN&gt;&lt;BR /&gt;&lt;A href="http://cookbooks.adobe.com/post_Tracking_results_from_multiple_simultaneous_servic-922.html" rel="nofollow noopener noreferrer" target="_blank"&gt;http://cookbooks.adobe.com/post_Tracking_results_from_multiple_simultaneous_servic-922.html&lt;/A&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 23:13:12 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83913#M1894</guid>
      <dc:creator>MarkDeaton</dc:creator>
      <dc:date>2021-12-10T23:13:12Z</dc:date>
    </item>
    <item>
      <title>Re: Second QueryTask Runs before First One Completes - How to Get Results from First</title>
      <link>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83914#M1895</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;frank, &lt;/SPAN&gt;&lt;BR /&gt;&lt;A class="jive-link-external-small" href="http://web.zone.ee/bespiva/multiquery/" rel="nofollow" target="_blank"&gt;in this sample&lt;/A&gt;&lt;SPAN&gt; with &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="http://web.zone.ee/bespiva/multiquery/srcview/index.html" rel="nofollow" target="_blank"&gt;sources&lt;/A&gt;&lt;SPAN&gt; used AsyncResponder, token ...&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 10 Jan 2013 05:59:03 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83914#M1895</guid>
      <dc:creator>IvanBespalov</dc:creator>
      <dc:date>2013-01-10T05:59:03Z</dc:date>
    </item>
    <item>
      <title>Re: Second QueryTask Runs before First One Completes - How to Get Results from First</title>
      <link>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83915#M1896</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks to all of you!&amp;nbsp; I went with the solution of using an AsyncResponder with a token like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function FilterAttributeTablesByPolygon(poly:Polygon, strURL:String):void
{
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; var token:Object = new Object();

&amp;nbsp;&amp;nbsp;&amp;nbsp; // set the token to the URL of the feature layer to know witch feature layer is being queried when the result is returned&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; token = strURL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; querytaskFeaturesByPolygon.url = strURL;
&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; queryFeaturesByPolygon.geometry = poly;

&amp;nbsp;&amp;nbsp;&amp;nbsp; // pass the token in the responder 
&amp;nbsp;&amp;nbsp;&amp;nbsp; querytaskFeaturesByPolygon.execute(queryFeaturesByPolygon, new AsyncResponder(querytaskFeaturesByPolygon_executeCompleteHandler, querytask_faultHandler, token));
&amp;nbsp;&amp;nbsp; 
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then I modified the query result function to accept and read the token:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
protected function querytaskFeaturesByPolygon_executeCompleteHandler(fs:FeatureSet, token:Object = null):void
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; var attributes:Array = fs.attributes;
&amp;nbsp;&amp;nbsp;&amp;nbsp; var al:ArrayList = new ArrayList();
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; for each (var objRec in attributes)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; al.addItem(objRec);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp; // use the token value in a switch statement&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; switch(token)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ....Code continues....

&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for all of your suggestions.&amp;nbsp; This is working with code that I can reuse query any featurelayer by a polygon.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 Dec 2021 23:13:14 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-api-for-flex-questions/second-querytask-runs-before-first-one-completes/m-p/83915#M1896</guid>
      <dc:creator>chuckfrank</dc:creator>
      <dc:date>2021-12-10T23:13:14Z</dc:date>
    </item>
  </channel>
</rss>

