javascript - 计算 Firebase Cloud Functions 中的子级数

标签 javascript firebase firebase-realtime-database google-cloud-functions database-trigger

我正在学习使用 firebase,我需要一些帮助。 我需要获取 Firebase 函数中特定节点的子节点数量,但我不能。

这是我的节点:

This is my node

我想编写一个触发器,在 watingRoom 中创建新用户后,检查 waitingRoom 中的用户总数,并根据此数字返回不同的内容。

这是我的代码:

exports.createOtherNode = functions.database
.ref('/waitingRoom/{userID}')
.onCreate((snapshot, context) => {

    const usersInWatingRoom = snapshot.ref.parent.once('value', (datasnapshot) => {
        const numberOfChildren = datasnapshot.numChildren()
        return numberOfChildren
    });
    console.log(usersInWatingRoom)

    if(usersInWatingRoom > 100)
      //RETURN SOMETHING
    else
      //RETURN SOMETHING ELSE    

 });

代码可以工作,但 usersInWatingRoom 返回的不是一个数字,而是一个 promise 。

(console log: Promise {
  <pending>,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }
)

我期望值​​ 2,这样我就可以处理 if

如何解决这个问题?您是否建议我另一种在 onCreate 触发器中获取节点子节点数量的方法?

最佳答案

对 JavaScript Promise 的理解是 essential确保云功能为您正常工作。

在这种情况下,您需要链接返回的 Promise 来完成额外的工作。

您还需要确保使用 once 的 promise 形式,以确保获得确定性结果。回调形式在云函数环境中无法正常工作,因为函数可能会在回调执行之前终止。

请注意,从后端函数返回一个值(除了返回一个 promise )没有多大意义——因为没有调用者会得到结果(当然,做一些事情,比如进一步的数据库更新,不会有道理)。

无论如何,您大致需要执行以下操作:

exports.createOtherNode = functions.database
  .ref('/waitingRoom/{userID}')
  .onCreate((snapshot, context) => {

    return snapshot.ref.parent.once('value').then((datasnapshot) => {
        const numberOfChildren = datasnapshot.numChildren()
        return numberOfChildren
    }).then((usersInWaitingRoom) => {
        console.log(usersInWaitingRoom)    
        if(usersInWaitingRoom > 100)
          // Do Something
        else
          // Do Something Else
    }); 
 });

关于javascript - 计算 Firebase Cloud Functions 中的子级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59018250/

相关文章:

java - 使用 FirebaseUI 在 Android TextView 中绑定(bind)嵌套的 JSON

java - 在 Java 中结束 Firebase 查询/回调

Javascript onbeforeunload 关闭浏览器窗口

javascript - 带返回值的 Promise 并行执行

javascript - ES6 Promises - 类似 async.each 的东西?

json - 组的 Firebase 数据库规则

javascript - Firebase登录后无法获取数据

javascript - 如何使用 rxjs Observables 实现以下功能?

javascript - 如何根据文档中的特定字段从集合中获取文档

firebase - 在 Firebase 控制台中按数组或映射字段值查询 Firestore 文档