【问题标题】:Update data if exist in firebase如果存在于 firebase 中,则更新数据
【发布时间】:2017-07-14 18:20:59
【问题描述】:

我正在尝试更新数据(如果存在)

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);
    })
  }
});

推送工作正常,但更新没有。

snapshot.ref 不是函数

在snapshot()日志控制台中:

我也试过这种方式:

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

结果:

refUserId.update 不是函数

用户结构

【问题讨论】:

    标签: firebase ionic-framework firebase-realtime-database


    【解决方案1】:

    第一个问题是快照的ref property 是一个对象——而不是一个函数。

    第二个是快照引用users 路径,因此您应该像这样检查与您的查询匹配的用户:

    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
        });
      }
    });
    

    如果您想知道 updatepush 何时完成,您可以使用 Promise:

    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);
      });
    

    【讨论】:

    • 谢谢。但更新后,它不会更新信息,而是创建一个新的imgur.com/a/kDNwY
    • 谢谢。我刚刚在您的代码中对其进行了修改: child.ref().update(vm.user_infos);为此: child.ref.update(vm.user_infos);效果很好
    猜你喜欢
    • 2014-03-20
    • 2021-10-27
    • 1970-01-01
    • 2015-12-17
    • 2021-12-10
    • 2023-04-04
    • 2018-03-19
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多