Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io地理位置回调_Javascript_Node.js_Google Maps_Sockets - Fatal编程技术网

Javascript Socket.io地理位置回调

Javascript Socket.io地理位置回调,javascript,node.js,google-maps,sockets,Javascript,Node.js,Google Maps,Sockets,使用GoogleMapsAPI,我有几行代码可以在用户按下allow后检索用户的位置 var geocoder = new google.maps.Geocoder; navigator.geolocation.getCurrentPosition(function(position) { var pos = { lat: position.coords.latitude, l

使用GoogleMapsAPI,我有几行代码可以在用户按下allow后检索用户的位置

var geocoder = new google.maps.Geocoder;


            navigator.geolocation.getCurrentPosition(function(position) {
              var pos = {
                lat: position.coords.latitude,
                lng: position.coords.longitude - .12
              };
              map.setCenter(pos);
              var realCoords = {
                lat: position.coords.latitude,
                lng: position.coords.longitude
              };
              geocoder.geocode({'location': realCoords}, function(results, status) {
                if (status === 'OK') {
                  userCity = results[0].address_components[2].long_name;

                }
              });
            });
问题是,我有一个socket.io事件,当用户连接到页面时,它会立即发出,并且需要从地理位置使用用户的城市。不幸的是,这会导致城市输出未定义,因为套接字函数在地理定位完成查找用户位置之前运行

是否仍然需要使用回调,以便套接字事件仅在找到用户位置后运行?我们不想使用timeout,因为它是同步的,时间量取决于用户的地理位置有多快

io.on("connection", function(socket)
{
    console.log("Made socket connection", socket.id);



    io.sockets.emit("showDeals", foodCount);


    socket.on("addFood", function(data)
    {
        foodCount.push(data);
        io.sockets.emit("addFood", data);
    });

    socket.on("upvote", function(data)
    {
        foodCount.forEach(function(element)
            {
                if (element.name == data.name)
                    {
                        element.votes++;
                    }
            });

        foodCount.sort(function(a, b) {
            return parseInt(b.votes) - parseInt(a.votes);
        });

        io.sockets.emit("upvote", foodCount);
    });
});
要注意的一条线是

io.sockets.emit("showDeals", foodCount);

让浏览器在地理定位完成时发出事件,然后您发出
showDeals
。让浏览器在地理定位完成时发出事件,然后您发出
showDeals