Solved! Go to Solution.
//sample code - not for production //should consider using Promise and PromiseAll function getSelectionLayerDeferred(featureLayerArray, selectQuery) { var returnDeferred = null; var selectionLayers = []; var defferredCallArray = []; require(["dojo/DeferredList", "dojo/Deferred"], function (DeferredList, Deferred) { returnDeferred = new Deferred(); dojo.forEach(featureLayerArray, function (flayer) { var defferredCall = flayer.selectFeatures(selectQuery, esri.layers.FeatureLayer.SELECTION_NEW); //cast the dojo.deferred to a promise so we can use the new //dojo/promise/all in lieu of dojo/DeferredList (deprecated at v 1.8) defferredCallArray.push(defferredCall); }); var dl = new DeferredList(defferredCallArray); dl.then(function (results) { // Executed when all deferred resolved if (results.length > 0) { dojo.forEach(results, function (result) { if (result[0] === true && result[1].length > 0) { selectionLayers.push({ 'featureLayer': result[1][0].getLayer(), 'features': result[1] }); } }); } returnDeferred.resolve({ 'success': true, 'selectionLayers': selectionLayers }); }, function (err) { returnDeferred.resolve({ 'success': false, 'selectionLayers': null, 'error': err }); }); }); return returnDeferred; } //here is some sample code of how I implement it //not for production //select related records var selQuery = new esri.tasks.Query(); selQuery.where = "GAZ_ID = " + updateGraphic.attributes["GAZ_ID"]; var deferred = getSelectionLayerDeferred([landformAllpointFeatureService], selectQuery); deferred.then(function (results) { if (results.success && results.selectionLayers) { //bind to data to add to grid //TODO: work in progress ... // buildDataStore(results.selectionLayers[0].features) setDisableToolbarControls(ToolbarType.Editor_Select, false); hideProcessingDialog(); refreshMap(); } else { setDisableToolbarControls(ToolbarType.Editor_Select, true); hideProcessingDialog(); } }, function (error) { // Do something on failure. hideProcessingDialog(); drawToolbar.deactivate(); //var err = results.error; alert("Error ...") });
//sample code - not for production //should consider using Promise and PromiseAll function getSelectionLayerDeferred(featureLayerArray, selectQuery) { var returnDeferred = null; var selectionLayers = []; var defferredCallArray = []; require(["dojo/DeferredList", "dojo/Deferred"], function (DeferredList, Deferred) { returnDeferred = new Deferred(); dojo.forEach(featureLayerArray, function (flayer) { var defferredCall = flayer.selectFeatures(selectQuery, esri.layers.FeatureLayer.SELECTION_NEW); //cast the dojo.deferred to a promise so we can use the new //dojo/promise/all in lieu of dojo/DeferredList (deprecated at v 1.8) defferredCallArray.push(defferredCall); }); var dl = new DeferredList(defferredCallArray); dl.then(function (results) { // Executed when all deferred resolved if (results.length > 0) { dojo.forEach(results, function (result) { if (result[0] === true && result[1].length > 0) { selectionLayers.push({ 'featureLayer': result[1][0].getLayer(), 'features': result[1] }); } }); } returnDeferred.resolve({ 'success': true, 'selectionLayers': selectionLayers }); }, function (err) { returnDeferred.resolve({ 'success': false, 'selectionLayers': null, 'error': err }); }); }); return returnDeferred; } //here is some sample code of how I implement it //not for production //select related records var selQuery = new esri.tasks.Query(); selQuery.where = "GAZ_ID = " + updateGraphic.attributes["GAZ_ID"]; var deferred = getSelectionLayerDeferred([landformAllpointFeatureService], selectQuery); deferred.then(function (results) { if (results.success && results.selectionLayers) { //bind to data to add to grid //TODO: work in progress ... // buildDataStore(results.selectionLayers[0].features) setDisableToolbarControls(ToolbarType.Editor_Select, false); hideProcessingDialog(); refreshMap(); } else { setDisableToolbarControls(ToolbarType.Editor_Select, true); hideProcessingDialog(); } }, function (error) { // Do something on failure. hideProcessingDialog(); drawToolbar.deactivate(); //var err = results.error; alert("Error ...") });