我有一个应用程序,如果用户选择了频率+ startDate,则应该在接下来的2个小时内每周重复一次相同的事件。
例如,我将从下周一获得2个mounths(momentJs)的数组。
将这些事件添加到Firestore的最佳方法是什么?我可以使用forEach但不确定,也可以使用cloudFunctions
直到现在我的代码都用完日期数组
addServices() {
let obj = {
startOn: this.assignment.dayoftheweekText,
stopAfter:this.assignment.stopAfter,
weekDay:this.assignment.dayFullname,
frenquency:this.assignment.frenquency,
skipWeeks:this.assignment.skipWeeks,
isDone:this.assignment.isDone,
isPaid:this.assignment.isPaid,
owner: this.ownerID,
name:this.userName
}
let newObj = JSON.stringify(obj, function (key, value) {
return (value === undefined) ? "" : value
});
console.log(this.ownerID)
if( this.ownerID !== undefined && this.assignment.dayoftheweekText !== null || undefined || '' ){
this.firebaseCommunication.createService(JSON.parse(newObj), this.id).then(res => {
this.firebaseCommunication.saveServiceId(res["id"]).then(res => {
this.alertService.present({
header: 'Sucess',
message: 'Assignment added! May take a while until update please be patient',
buttons: [{
text: 'OK',
handler: () => {
// this.customerService.setAction("Refresh");
/* this.router.navigate(['tabs/customers'], {
replaceUrl: true
}); */
this.dismissModal();
}
}]
})
}).catch(err => {
console.log(err)
})
}).catch(err => {
console.log(err)
})
}
else{
this.alertService.present({
header: 'Choose Day of Week',
message: 'Please choose the Day of the Week and Tech!!!',
buttons: ['OK']
})
}
}
一旦从客户端收到HTTP POST请求或文档,您就可以使用App Engine Python或Cloud Function批量添加事件。它可以在后端更轻松地完成。例如,您可以编写一个云函数以如下方式触发:
// Listen for changes in all documents in the 'users' collection
exports.useWildcard = functions.firestore
.document('event_add_requests/{event_add_request_id_1}')
.onWrite((change, context) => {
dates = ... // obtain a set of dates for the event
// generate_event(date) produces an event on a single day
let batch = db.batch();
let event_ref = db.collection("users").document(change.after.data().owner).collection("events").document()
batch.set(event_ref, generate_event(date))
batch.commit().then(function () {
// ...
});
});
通过这种方式,所有重复事件都添加到batch
中,您可以避免由于客户端脱机等导致的一致性问题。
您还可以为onDelete
添加event_add_requests
侦听器,以删除单个event
生成的所有event_add_request
。