2017-05-25 105 views
0

我的实时数据库具有这种结构云功能的火力地堡 - 获取数据库值“同步”

- userId1 
    - meta 
     - name 
    - data 
     - dataId1 
      - description 
     - dataId2... 
- userId2.... 

我试图监视增补dataIdx但想要得到的name场了。我尝试了以下方法,但是滥用了parent方法。于是我想到了注释掉线,但.once是异步的,这开始让我的代码更复杂,而在examples有到set是或多或少同步调用

exports.sendNotification = functions.database.ref('/{userId}/presents/{dataId}') 
    .onWrite(event => { 
     var eventSnapshot = event.data; 
     var person = eventSnapshot.parent().parent().child("meta").child("name").val(); 
     // var person = admin.database().ref('/' + event.params.userId + '/meta/name').once().val(); 
     let p = eventSnapshot.child("description").val(); 
     console.log(`${person} added ${p}`); 

什么是正确的办法做到这一点

+0

['set'](https://firebase.google.com/docs/reference/admin/ node/admin.database.Reference#set)不同步组织单位;它返回一个承诺。只是示例中的调用代码没有等待'set'调用来解决或出错。 – cartant

+0

好吧,我正在尝试基于承诺的解决方案 –

回答

0

这是我想出了利用链式承诺建立我的数据

exports.sendNotification = functions.database.ref('/{userId}/presents/{presentId}') 
    .onWrite(event => { 
     let p = eventSnapshot.child("description").val(); 
     return event.data.ref.parent.parent.child('meta/name').once("value") 
      .then(snapshot => { 
       let person = snapshot.val(); 

       var payload = { 
        data: { 
         person: person, 
         ... 
        } 
       };