Все, что мы можем сказать из кода, которым вы поделились, это то, что для некоторого значения i
, usersLocations[i]
не имеет свойства Location
. Если вы не изменили свой код, вам нужно проверить, в каком документе отсутствует это свойство.
Кроме того, вы можете пропустить такие документы и зарегистрировать их идентификатор, изменив второй then
на:
for(let i=0; i<usersLocations.length; i++) {
if (!usersLocations[i] || !usersLocations[i].Location) {
console.error("Missing Location data in "+i+": "+JSON.stringify(usersLocations[i]));
continue; // skip further processing of this user
}
let userPosition = new google.maps.LatLng(usersLocations[i].Location.latitude, usersLocations[i].Location.longitude);
let userMarker = new google.maps.Marker({
position: userPosition,
icon: {
url: "http://maps.google.com/mapfiles/ms/icons/yellow-dot.png"
},
map: this.map
});
}
Несколько более современный / идиоматический c способ сделать это:
firebase
.firestore()
.collection("users")
.get()
.then(querySnapshot => {
// Convert the snapshot to an array of IDs and data
return querySnapshot.docs.map(doc => { doc.id, ...doc.data() });
})
.then(documents => {
// Remove admins
return documents.filter(doc => doc.isAdmin==false);
})
.then(documents => {
// Remove and log documents that have no location field
return documents.filter(doc => {
if (!doc.Location) {
console.error(`Document ${doc.id} doesn't have a Location`);
return false; // remove this document from the array
}
return true;
});
.then(documents => {
documents.forEach(doc => {
let userPosition = new google.maps.LatLng(doc.Location.latitude, doc.Location.longitude);
let userMarker = new google.maps.Marker({
position: userPosition,
icon: {
url: "http://maps.google.com/mapfiles/ms/icons/yellow-dot.png"
},
map: this.map
});
});
});