【发布时间】:2018-12-06 03:05:26
【问题描述】:
我尝试创建一个 Firebase 云函数,它对实时数据库中的新“事件”做出反应,并在相应用户的通知列表中添加一个“通知”对象。我成功获取了新的事件信息,向相应的用户推送通知,但不是列表格式(而是哈希图格式)。
所以我尝试获取孩子的数量,以便推送具有良好索引的新通知。在那种情况下,我不知道如何管理承诺。
想法是从新事件中获取运动名称和级别,在运动中获取对应的用户并为每个用户添加通知。
-
还有我的云功能:
export.detectEvent = 函数.数据库 .ref("事件/{eventID}") .onCreate((快照,上下文)=> { 常量事件 = 快照.val(); 常量运动 = event.sport.name; 常量级别 = event.niveau; 常量名称 = 事件名称; var 承诺=[]; var path =“运动/”+运动+“/”+级别; 变量通知 = { 类型:“事件”, contentID : context.params.eventID, 消息:sport +“:Un nouvel événement vous!”, 见过:假的, 日期:“01” }; console.log('路径', 路径); return admin.database().ref(path).once("value", function(result) { var 数据 = 结果.val(); for(数据中的 var 属性){ if (datas.hasOwnProperty(property)) { promises.push(admin.database().ref("Users/"+datas[property]+"/notifications").on("value", function(snapshot) { console.log("有"+snapshot.numChildren()+"个通知"); admin.database().ref("Users/"+datas[property]+"/notifications").child(snapshot.numChildren()).set(notif) }));} } return Promise.all(promises); })});
有表:
【问题讨论】:
-
您的函数中有两个返回语句。这不可能是你想要的——一个函数只能返回一个值。此外,您没有正确处理承诺。最后,你几乎不应该使用 on()。使用 once() 代替一次获取数据。
-
感谢您的回答。你有想法怎么做吗?
标签: javascript firebase firebase-realtime-database promise google-cloud-functions