2017-02-24 1 views
0

Ich versuche, ein Datum zu aktualisieren, wenn esDaten aktualisieren, wenn existieren in Feuerbasis

existiert
var ref = firebase.database().ref().child('users'); 
var refUserId = firebase.database().ref().child('users').orderByChild('id').equalTo(Auth.$getAuth().uid); 
refUserId.once('value', function (snapshot) { 
     console.log(snapshot); 
     if (snapshot.exists()) { 
      snapshot.ref().update(vm.user_infos); 
     } else { 
     ref.push({ 
      player: vm.user_infos.player, 
      id: vm.user_infos.id 
     }, function(error) { 
     console.log(error); 
    }) 
    } 
}); 

Drücken funktioniert gut, aber das Update nicht.

snapshot.ref ist keine Funktion

Im Snapshot() log Konsole:

enter image description here

ich auch auf diese Weise versucht:

if (snapshot.exists()) { 
    refUserId.update({ 
     player: vm.user_infos.player, 
     id: vm.user_infos.id 
    }, function(error) { 
    console.log(error); 
}) 

Ergebnis :

refUserId.update ist keine Funktion

Benutzerstruktur

enter image description here

Antwort

1

Das erste Problem ist, dass der Snapshot des ref property ein Objekt ist - keine Funktion.

Die zweite ist, dass der Snapshot auf den users Pfad bezieht, so sollten Sie für einen Benutzer überprüfen, die Ihre Abfrage wie folgt entspricht:

var ref = firebase.database().ref().child('users'); 
var refUserId = ref.orderByChild('id').equalTo(Auth.$getAuth().uid); 
refUserId.once('value', function (snapshot) { 
    if (snapshot.hasChildren()) { 
    snapshot.forEach(function (child) { 
     child.ref.update(vm.user_infos); 
    }); 
    } else { 
    snapshot.ref.push({ 
     player: vm.user_infos.player, 
     id: vm.user_infos.id 
    }); 
    } 
}); 

Und wenn Sie wissen wollen, wann die update oder push abgeschlossen könnten Sie Versprechungen verwenden:

refUserId 
    .once('value') 
    .then(function (snapshot) { 
    if (snapshot.hasChildren()) { 
     return snapshot.forEach(function (child) { 
     child.ref.update(vm.user_infos); 
     }); 
    } else { 
     return snapshot.ref.push({ 
     player: vm.user_infos.player, 
     id: vm.user_infos.id 
     }); 
    } 
    }) 
    .then(function() { 
    console.log('update/push done'); 
    }) 
    .catch(function (error) { 
    console.log(error); 
    }); 
+0

Danke. Aber nach dem Update, anstatt die Informationen zu aktualisieren, erstellt es eine neue http://imgur.com/a/kDNwY –

+0

Ich habe die Antwort aktualisiert. – cartant

+0

Danke. Ich habe es in Ihrem Code geändert: child.ref(). Update (vm.user_infos); dafür: child.ref.update (vm.user_infos); Arbeitete gut –

Verwandte Themen