从JavaScript中的嵌套异步函数返回值

时间:2019-04-22 19:09:23

标签: javascript function asynchronous nested return-value

我在这个网站上遇到了类似的问题,但没有一个适合我的情况。如果您可以检查此代码并帮助我进行哪些更改,将很有帮助。 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
            }

0 个答案:

没有答案