在函数中,返回值未分配给变量

时间:2018-07-27 11:12:50

标签: javascript arrays node.js express

我试图使用带有getMidPoint函数的多边形来查找三个不同位置的三个中点。同时尝试在getMidPoint函数中返回数组。数组值未分配给midPoints变量,我在终端中无法读取未定义的属性“ length”作为错误

var midPoints = getMidPoint(Location1, Location2)
    // Directions API
    var i = 0;
    var array = [];
    function getMidPoint(a, b) {
        console.log("I am working...")
        clientMap.post(config_KEYS.DIRECTION_API + a + "&destination=" + b + "&key=" + config_KEYS.GOOGLE_API_KEY + "&departure_time=" + timeStamp + "", function (googleDirectionData, error) {
            if (googleDirectionData.status == "ZERO_RESULTS" | googleDirectionData.status == "INVALID_REQUEST") {
                res.status(400).send(googleDirectionData)
            }
            else {
                var polyline = googleDirectionData.routes[0].overview_polyline.points
                var decoded = decode(polyline)                
                var n = Math.round(decoded.length / 2)
                var obj = {}
                obj.latitude = decoded[n].latitude
                obj.longitude = decoded[n].longitude
                array.push(obj)   
            }  
        })
        return array    
    }

    if (midPoints && midPoints.length == 1) {
        console.log("durationpointDat   dfggdfg"+ midPoints.length)
        var durationpointData2 = getMidPoint(Location2, Location3)
    }
    else {
        if (midPoints.length == 2) {
            console.log("durationpointData fdf"+ midPoints.length)
            var durationpointData3 = getMidPoint(Location3, Location1)                        
        }
        else{
                res.status(200).json(array)
        }
    }

建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

正如我在ctrl + c中的代码中看到的那样,您正在调用google map API。这是getMidPoint调用方式,表示在完成Google API调用之前,您的代码正在执行下一个代码,因此在asynchronous中,您将无法定义。

表示您要在完成Google Map API之前返回数组。您必须创建一个回调并将数据传递到其中。

您可以按照以下示例进行操作。

midPoints

答案 1 :(得分:0)

尝试在函数中声明var数组并返回它。不在全球范围内