我在这个网站上遇到了类似的问题,但没有一个适合我的情况。如果您可以检查此代码并帮助我进行哪些更改,将很有帮助。 gpoint_found的值不会在函数外部更改。
我在Return value from nested function in Javascript尝试了解决方案
validateAddress: function (address) {
var x_coord = address.feature.geometry.x;
var y_coord = address.feature.geometry.y;
address = address.name;
address = address.toUpperCase();
gpoint_found = 0;
//check if it is in gridpoints area
var queryCitiesTask = new QueryTask(myurl);
var query = new Query();
query.geometry = new Point(x_coord, y_coord, new SpatialReference({ wkid: 102100 }));
query.outFields = ["pt_v03_ind"];
queryCitiesTask.execute(query, function (result) {
if (result.features[0] == null) {
gpoint_found = -1;
}
return gpoint_found;
});
//doesnt work
console.log("gpfound", gpoint_found)
if (gpoint_found == -1) {
return -1
}
//check if address in Louisiana
return address.indexOf(",LA") !== -1 || address.indexOf(", LA") !== -1 || address.indexOf(" LA") !== -1 || address.indexOf(",LOUISIANA") !== -1 || address.indexOf(", LOUISIANA") !== -1 || address.indexOf(" LOUISIANA") !== -1;
},
如果在queryCitiesTask.execute(query,function(result))中gpoint_found == -1,我试图在validateAddress中返回-1
我尝试过:
validateAddress: function (address) {
var x_coord = address.feature.geometry.x;
var y_coord = address.feature.geometry.y;
address = address.name;
address = address.toUpperCase();
gpoint_found = 0;
//check if it is in gridpoints area
var queryCitiesTask = new QueryTask(myurl);
var query = new Query();
query.geometry = new Point(x_coord, y_coord, new SpatialReference({ wkid: 102100 }));
query.outFields = ["pt_v03_ind"];
queryCitiesTask.execute(query, function (result) {
if (result.features[0] == null) {
gpoint_found = -1;
do_something(gpoint_found);
}
return gpoint_found;
});
function do_something(grid_point) {
if (grid_point == -1) {
return -1
}
else {
//check if address in Louisiana
return address.indexOf(",LA") !== -1 || address.indexOf(", LA") !== -1 || address.indexOf(" LA") !== -1 || address.indexOf(",LOUISIANA") !== -1 || address.indexOf(", LOUISIANA") !== -1 || address.indexOf(" LOUISIANA") !== -1;
}
}
console.log("gpfound", gpoint_found)
return do_something;
},
另外,另一个函数也调用了validateAddress之类的
if (!this.validateAddress(resultAddress) && !this.validateAddress(geocoderAddress)) {
//smt
}
else if (this.validateAddress(resultAddress) == -1 || this.validateAddress(geocoderAddress) == -1) {
//smt
}