I have this script that runs through all the child items in my realtime database from firebase:
methods: {
submit: function() {
const gebruikersref = firebase.database().ref('Gebruikers/')
var self = this
gebruikersref.once('value', function(snapshot) {
const lid = self.lidnummer;
const voornaam = self.voornaam;
const achternaam = self.achternaam;
const email = self.email;
snapshot.forEach(function(childSnapshot) {
const data = childSnapshot.val()
});
if(lid == data.Lidnummer) {
console.log('err')
} else {
gebruikersref.push({
Voornaam: voornaam,
Achternaam: achternaam,
Email: email,
Lidnummer: lid
});
}
});
}
}
but how do i get const data = childSnapshot.val()
outside the foreach loop so i can use it here:
if(lid == data.Lidnummer) {
console.log('err')
} else {
gebruikersref.push({
Voornaam: voornaam,
Achternaam: achternaam,
Email: email,
Lidnummer: lid
});
}
Otherwise the else method runs x times the number of children and will push my data (that only may be pushed once) x times the children
If I correctly understand your question, since the asynchronous push()
method returns a ThenableReference
, you can use Promise.all()
as follows:
submit: function() {
const gebruikersref = firebase.database().ref('Gebruikers/')
var self = this
gebruikersref.once('value', function(snapshot) {
const lid = self.lidnummer;
const voornaam = self.voornaam;
const achternaam = self.achternaam;
const email = self.email;
const promises = [];
snapshot.forEach(function(childSnapshot) {
const data = childSnapshot.val()
if (lid == data.Lidnummer) {
console.log('err')
} else {
promises.push(gebruikersref.push({
Voornaam: voornaam,
Achternaam: achternaam,
Email: email,
Lidnummer: lid
})
);
}
});
Promise.all(promises);
});
}
Sorry for the late answer @Renaud Tarnec but this is the answer thank you very much! :)