在 firebase Cloud Functions 中计算子项
Counting Children in a firebase Cloud Functions
我正在学习使用 firebase,我需要一些帮助。
我需要在 Firebase 函数中获取特定节点的子节点数,但我不能。
这是我的节点:
我想编写一个触发器,在 watingRoom
中创建新用户后,检查 waitingRoom 中的用户总数和 returns 基于此数字的不同内容。
这是我的代码:
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 return 就像一个承诺。
(console log: Promise {
<pending>,
domain:
Domain {
domain: null,
_events: { error: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
)
我期望值为 2,这样我就可以处理 if
。
如何解决?你能建议我另一种方法来获取 onCreate
触发器中节点的子节点数吗?
了解 javascript promises 是 essential 确保云功能为您正常工作。
在这种情况下,您需要链接返回的承诺以完成额外的工作。
您还想确保使用 once
的承诺形式,以确保获得确定性的结果。回调形式在云函数环境中将无法正常工作,因为函数可以在进行回调之前终止。
请注意,从后端函数返回一个值(除了返回一个承诺)没有多大意义——因为没有调用者会得到结果(当然,做一些事情,比如进一步的数据库更新, 确实有道理)。
无论如何,您需要做的大致如下:
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
});
});
我正在学习使用 firebase,我需要一些帮助。 我需要在 Firebase 函数中获取特定节点的子节点数,但我不能。
这是我的节点:
我想编写一个触发器,在 watingRoom
中创建新用户后,检查 waitingRoom 中的用户总数和 returns 基于此数字的不同内容。
这是我的代码:
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 return 就像一个承诺。
(console log: Promise {
<pending>,
domain:
Domain {
domain: null,
_events: { error: [Function] },
_eventsCount: 1,
_maxListeners: undefined,
members: [] } }
)
我期望值为 2,这样我就可以处理 if
。
如何解决?你能建议我另一种方法来获取 onCreate
触发器中节点的子节点数吗?
了解 javascript promises 是 essential 确保云功能为您正常工作。
在这种情况下,您需要链接返回的承诺以完成额外的工作。
您还想确保使用 once
的承诺形式,以确保获得确定性的结果。回调形式在云函数环境中将无法正常工作,因为函数可以在进行回调之前终止。
请注意,从后端函数返回一个值(除了返回一个承诺)没有多大意义——因为没有调用者会得到结果(当然,做一些事情,比如进一步的数据库更新, 确实有道理)。
无论如何,您需要做的大致如下:
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
});
});