Javascript Socket.io地理位置回调
使用GoogleMapsAPI,我有几行代码可以在用户按下allow后检索用户的位置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
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
。