Penso che, se capisco la domanda principale, la risposta breve è che non c'è modo di forzare un array vuoto in Firebase. Tuttavia, ci sono alcuni paradigmi che potrebbero funzionare meglio di quello che hai sopra.
Ricorda che Firebase è un ambiente in tempo reale. Il numero di auto e incidenti può (e lo farà) cambiare in qualsiasi momento. È meglio trattare tutto come nuovi dati che arrivano in tempo reale ed evitare persino di pensare all'esistenza o non esiste.
// fetch all the people in real-time
rootRef.child('people').on('child_added', function(personSnapshot) {
// monitor their cars
personSnapshot.ref().child('cars', 'child_added', function(carSnapshot) {
// monitor accidents
carSnapshot.ref().child('accidents', 'child_added', function(accidentSnapshot) {
// here is where you invoke your code related to accidents
});
});
});
Si noti come non v'è alcuna necessità di if exists/unless
Tipo di logica. Si noti che probabilmente si desidera anche monitorare child_removed
su cars
e people
e chiamare ref.off()
per interrompere l'ascolto di bambini specifici.
Se per qualche motivo si vuole rimanere con il modello statico, quindi forEach diventerà il vostro amico:
// fetch all the people as one object, asynchronously
// this won't work well with many thousands of records
rootRef.child('people').once('value', function(everyoneSnap) {
// get each user (this is synchronous!)
everyoneSnap.forEach(function(personSnap) {
// get all cars (this is asynchronous)
personSnap.ref().child('cars').once('value', function(allCars) {
// iterate cars (this is synchronous)
allCars.forEach(function(carSnap) { /* and so on */ });
});
});
});
nota come, anche con forEach, non v'è alcuna necessità di "esiste o meno che" sorta di logica.
Grande risposta Kato! –