Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算firebase云函数中的子函数_Javascript_Firebase_Firebase Realtime Database_Google Cloud Functions_Database Trigger - Fatal编程技术网

Javascript 计算firebase云函数中的子函数

Javascript 计算firebase云函数中的子函数,javascript,firebase,firebase-realtime-database,google-cloud-functions,database-trigger,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,Database Trigger,我正在学习使用firebase,我需要一些帮助。 我需要获取Firebase函数中特定节点的子节点数,但我不能 这是我的节点: 我想写一个触发器,在watingRoom中创建新用户后,检查waitingRoom中的用户总数,并根据这个数字返回不同的内容 这是我的代码: exports.createOtherNode=functions.database .ref('/waitingRoom/{userID}') .onCreate((快照、上下文)=>{ const usersInWating

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

这是我的节点:

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

这是我的代码:

exports.createOtherNode=functions.database
.ref('/waitingRoom/{userID}')
.onCreate((快照、上下文)=>{
const usersInWatingRoom=snapshot.ref.parent.once('value',(datasnapshot)=>{
const numberOfChildren=datasnapshot.numChildren()
返回儿童人数
});
console.log(usersInWatingRoom)
如果(用户参与房间>100)
//归还某物
其他的
//归还其他东西
});
代码是有效的,但不是一个数字,usersInWatingRoom会像承诺一样返回

(console log: Promise {
  <pending>,
  domain: 
   Domain {
     domain: null,
     _events: { error: [Function] },
     _eventsCount: 1,
     _maxListeners: undefined,
     members: [] } }
)
(控制台日志:Promise){
,
域:
领域{
域:空,
_事件:{错误:[函数]},
_事件提示:1,
_maxListeners:未定义,
成员:[]}
)
我期望值为2,这样我就可以处理
if


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

了解javascript承诺是为了确保云函数为您正常工作

在这种情况下,您需要关闭返回的承诺来完成额外的工作

您还需要确保使用
的承诺形式一次
,以确保获得确定性结果。回调表单在云函数环境中不会很好地工作,因为函数可以在进行回调之前终止

请注意,从后端函数返回值(而不是返回承诺)没有多大意义——因为没有调用方会得到结果(当然,做一些事情,比如进一步的数据库更新,是有意义的)

在任何情况下,您都需要大致做到以下几点:

exports.createOtherNode=functions.database
.ref('/waitingRoom/{userID}')
.onCreate((快照、上下文)=>{
返回snapshot.ref.parent.one('value')。然后((datasnapshot)=>{
const numberOfChildren=datasnapshot.numChildren()
返回儿童人数
}).然后((usersInWaitingRoom)=>{
console.log(usersInWaitingRoom)
如果(用户等待室>100)
//做点什么
其他的
//做点别的
}); 
});

Okei,非常感谢!但是,有没有一种方法可以在不使用回调形式的情况下获取numberOfChildren的值呢?这是承诺形式,而不是回调形式:)并且没有,如果您想要父子计数,则不需要,因为您需要再次调用数据库来获取该值。如果需要触发函数的
/waitingRoom/{userID}
节点上的计数,则该计数存在于通过函数调用获得的快照中。