我是软件开发的新手,他构建了一个Angular TS应用程序来管理队列中的人员,并且后端使用Firebase / Firestore。用户有3种状态:用户正在等待,被呼叫或不在队列中。呼叫用户时,他/她必须在10s前响应“出席”,否则他/她将自动退出队列。
我尝试通过每秒钟激活一个服务来实现最后一个规范,该服务将检查是否已超过时间限制,并且在这种情况下,将在其相应的Firestore文档中将用户状态更新为“不在队列中”。
user.service.ts
console.log( 'Length: ' + getDBLength());
aaaa
Length: undefined
bbbb
returning length as: 1
user.component.ts
unqueueUser(): any {
const actualTime = new Date();
this.afs.collection<User>('users', ref =>
ref.orderBy('status.call_moment.time_lim', 'asc')
.where('status.value', '==', "CALLED")
.where('status.call_moment.time_lim', '<=', actualTime))
.snapshotChanges()
.pipe(map((actions: DocumentChangeAction<User>[]) => {
const indices = [];
actions.map((a: DocumentChangeAction<User>) => {
const data = a.payload.doc.data() as User;
indices.push(data.id);
});
return indices;
}))
.subscribe(data => {
for (const id of data) {
return this.afs.doc(`users/${id}`)
.update({
'status.value': "OUT OF THE LINE",
});
}
});
}
我的解决方案中最大的问题是,很容易在半天的时间内达到读取操作的限制(我有一百个用户要处理!)。
您知道更好的解决方案吗? Lemme知道是否需要进一步的信息来解决它。谢谢!
答案 0 :(得分:-1)
如果没有响应,而不是每秒轮询10秒,而只是在10秒钟的末尾进行读取,则应该以这种方式获得10倍的读取次数。如果您需要它比以前更具响应性,请每5秒轮询一次。