curious how to return a Boolean within the lang.hitch environment.
I would like to :
call query and return true or false so I know to continue or not
I am currently using lang.hitch for the query's return function and just chaining my next query within that, I would like to call the second query from outside of this.
something like:
var pass = Query1();
if (pass) Query2
here is some code
// Step 1
getEvacGeom: function (area, status) { //, order, alert, recind) {
var pass = false;
var queryTask = new QueryTask(this.EvacLayer);
var query = new Query();
query.returnGeometry = true;
query.outFields = ["*"];
query.outSpatialReference = this.map.spatialReference;
query.where = "AreaName = '" + area + "' and Status = '" + status + "'";
queryTask.execute(query, lang.hitch(this, EvacGeom_returned), lang.hitch(this, EvacGeom_error));
function EvacGeom_returned(results) {
if (results.features.length > 0) {
for (var i = 0; i < results.features.length; i++) {
var feature = results.features;
if (feature.attributes["EvacType"] == "Order")
feature.setSymbol(symbolOrder);
else if (feature.attributes["EvacType"] == "Alert")
feature.setSymbol(symbolAlert);
else if (feature.attributes["EvacType"] == "Recind")
feature.setSymbol(symbolRecind);
_glEvacs.add(feature);
};
// call Step 2 OLD WAY
//this.getParcelsByEvacExtent(evacExtent);
// NEW ATTEMPT
pass = true;
// ? return pass;
}
}
function EvacGeom_error(e) {
busyList.hide();
alert(e.message)
};
return pass; // this just returns the original false......
},
Solved! Go to Solution.
Dave,
That is a situation for a Deferred.
require 'dojo/Deferred',
Deferred
// Step 1
getEvacGeom: function (area, status) { //, order, alert, recind) {
var def = new Deferred()
var pass = false;
var queryTask = new QueryTask(this.EvacLayer);
var query = new Query();
query.returnGeometry = true;
query.outFields = ["*"];
query.outSpatialReference = this.map.spatialReference;
query.where = "AreaName = '" + area + "' and Status = '" + status + "'";
queryTask.execute(query, lang.hitch(this, EvacGeom_returned), lang.hitch(this, EvacGeom_error));
function EvacGeom_returned(results) {
if (results.features.length > 0) {
for (var i = 0; i < results.features.length; i++) {
var feature = results.features;
if (feature.attributes["EvacType"] == "Order")
feature.setSymbol(symbolOrder);
else if (feature.attributes["EvacType"] == "Alert")
feature.setSymbol(symbolAlert);
else if (feature.attributes["EvacType"] == "Recind")
feature.setSymbol(symbolRecind);
_glEvacs.add(feature);
};
def.resolve(true);
}
}
function EvacGeom_error(e) {
busyList.hide();
alert(e.message);
def.resolve(false);
};
return def;
},
Dave,
That is a situation for a Deferred.
require 'dojo/Deferred',
Deferred
// Step 1
getEvacGeom: function (area, status) { //, order, alert, recind) {
var def = new Deferred()
var pass = false;
var queryTask = new QueryTask(this.EvacLayer);
var query = new Query();
query.returnGeometry = true;
query.outFields = ["*"];
query.outSpatialReference = this.map.spatialReference;
query.where = "AreaName = '" + area + "' and Status = '" + status + "'";
queryTask.execute(query, lang.hitch(this, EvacGeom_returned), lang.hitch(this, EvacGeom_error));
function EvacGeom_returned(results) {
if (results.features.length > 0) {
for (var i = 0; i < results.features.length; i++) {
var feature = results.features;
if (feature.attributes["EvacType"] == "Order")
feature.setSymbol(symbolOrder);
else if (feature.attributes["EvacType"] == "Alert")
feature.setSymbol(symbolAlert);
else if (feature.attributes["EvacType"] == "Recind")
feature.setSymbol(symbolRecind);
_glEvacs.add(feature);
};
def.resolve(true);
}
}
function EvacGeom_error(e) {
busyList.hide();
alert(e.message);
def.resolve(false);
};
return def;
},
thanks,
looks simple in concept, but it returns def before return or error are ever reached.
is this not the concept?
launchQuery: function () {
var stepOneSuccess = this.getEvacGeom(selAreaName, selStatus);
if (stepOneSuccess) {...}
},
Dave,
No it would look like:
this.getEvacGeom(selAreaName, selStatus).then(function(result){
if(result) {
//Do something
}
});