我尝试创建一个Firebase云功能,对实时数据库中的新“事件”做出反应,并在通知列表中为相应用户添加“通知”对象。我成功获取了新的事件信息,将通知推送给了相应的用户,但不是列表格式(而是哈希图格式)。
因此,我尝试获取孩子的数量,以便以良好的索引推送新的通知。在这种情况下,我不知道如何履行承诺。
想法是从新事件中获取sport_name和level,以在Sport中获取相应的用户并为每个用户添加通知。
有我的云功能:
exports.detectEvent = functions.database
.ref("Event/{eventID}")
.onCreate((snapshot, context) => {
const event = snapshot.val();
const sport = event.sport.name;
const level = event.niveau;
const name = event.name;
var promises=[];
var path = "Sports/" + sport + "/" + level;
var notif = {
type : "Event",
contentID : context.params.eventID,
message : sport + " : Un nouvel événement vous correspond ! ",
seen : false,
date : "01"
};
console.log('path ', path);
return admin.database().ref(path).once("value", function(result) {
var datas = result.val();
for (var property in datas) {
if (datas.hasOwnProperty(property)) {
promises.push(admin.database().ref("Users/"+datas[property]+"/notifications").on("value", function(snapshot) {
console.log("There are "+snapshot.numChildren()+" notifs");
admin.database().ref("Users/"+datas[property]+"/notifications").child(snapshot.numChildren()).set(notif)
}));
}
}
return Promise.all(promises);
})
});
有表:
答案 0 :(得分:0)
此代码有效,但会为通知创建一个随机密钥。 如何将整数(0,1,2,...)作为关键字,以便在数据库中具有 list ?
<pre>
exports.detectEvent = functions.database
.ref("Event/{eventID}")
.onCreate((snapshot, context) => {
const event = snapshot.val();
const sport = event.sport.name;
const level = event.niveau;
const name = event.name;
var promises=[];
var path = "Sports/" + sport + "/" + level;
var notif = {
type : "Event",
contentID : context.params.eventID,
message : sport + " : Un nouvel événement vous correspond ! ",
seen : false,
date : "01"
};
console.log('path ', path);
return admin.database().ref(path).once("value", function(result) {
var datas = result.val();
for (var property in datas) {
if (datas.hasOwnProperty(property)) {
promises.push(admin.database().ref("Users/"+datas[property]+"/notifications").push(notif));
}
}
return Promise.all(promises);
})
});
<code>