【问题标题】:Cloud Functions for Firebase - get database value 'synchronously'Firebase 的云功能 - “同步”获取数据库值
【发布时间】:2017-05-25 15:38:44
【问题描述】:

我的实时数据库有这个结构

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

这样做的正确方法是什么

【问题讨论】:

  • set 不同步;它返回一个承诺。只是示例中的调用代码没有等待set调用解析或报错。
  • 好的,我现在正在尝试基于 Promise 的解决方案

标签: firebase firebase-realtime-database google-cloud-functions


【解决方案1】:

这就是我想出的使用链式 Promise 来构建我的数据

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,
                        ...
                    }
                };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2018-12-03
    相关资源
    最近更新 更多