如何在Firebase中收听特定的值更改?

时间:2018-01-28 09:13:21

标签: javascript firebase firebase-realtime-database

我的数据结构如下:赞美/收到/ {uid} / {complimentId} enter image description here

我想听听恭维/收到的变更/ {uid} / {complimentId} / updatedAt

我的代码是:

firebase.database().ref('compliments/received/' + currentUser._id).on('child_changed', (snap) => {
  console.log('update in action', snap.val())
  snap.ref.child('updatedAt').on('value', () => onUpdate(snap))
});

问题: 当我更新给定数据库路径上的任何字段时,此侦听器会触发,例如:当我将“see”从0设置为1.我想仅在updatedAt字段的值更改时才触发此侦听器。

到目前为止我尝试了什么:

firebase.database().ref('compliments/received/' + currentUser._id).on('child_changed', (snap) => {
  console.log('update in action', snap.val())
  snap.ref.child('updatedAt').on('child_changed', () => onUpdate(snap))
});

当我更改updatedAt字段的值时,不会触发此侦听器。

欢迎任何建议! 谢谢!

根据阿里的回答解决方案:

firebase.database().ref('compliments/received/' + currentUser._id).on('child_added', (snap) => {
    console.log('add in action', snap.val());
    firebase.database().ref('compliments/received/' + currentUser._id)
    .child(snap.key).child('updatedAt').on('value', async () => {
      const newSnap = await firebase.database().ref('compliments/received/' + currentUser._id)
      .child(snap.key).once('value')
      onUpdate(newSnap)
    })
});

1 个答案:

答案 0 :(得分:1)

结帐

firebase.database().ref('compliments/received/' + currentUser._id).on('child_added', (snap) =>
{
    console.log('add in action', snap.val());
    firebase.database().ref('compliments/received/' + currentUser._id)
    .child(snap.key).child('updatedAt').on('value', (updateSnap) => onUpdate(updateSnap))
});