这是一个令人讨厌的问题,我有一个Cloud Function,它通过应用程序(应用程序调用)调用将所有数据收集到某个集合(用户)中,然后使用* ngFor提取所有用户html。 当我删除,创建或更新此集合中的某些数据时,问题就来了,但它从未相应地更新,需要我重新加载页面。 是否有可能在实时功能中启用此功能?
函数导出:
exports.listarAllUsuarios = functions.https.onCall((data, context) => {
if(context.auth.token.admin !== true) {
return {
error: "Você não possui acesso a essa função"
};
}
return listAllUsers();
});
function listAllUsers() {
let a:string [] = [];
return db.collection('usuario').get()
.then((snapshot) => {
snapshot.forEach((doc) => {
a.push(doc.data());
});
return a;
})
.catch((error) => {
return error.message;
});
}
应用程序.ts
export class ListUserPage implements OnInit {
listarUser = firebase.functions().httpsCallable('listarAllUsuarios');
usuario:string[]=[];
constructor(
private toast: ToastService,
) {
}
ionViewWillEnter() {
this.usuario = [];
this.listarUser().then(result => {
return result.data;
}).then(result => {
result.map(dados => {
this.usuario.push(dados);
});
}).catch(error => {
this.toast.errorToast('Erro ao carregar lista de usuários', error)
});
}
ngOnInit() {
}
detalhesUsuario(usuario) {
console.log(usuario)
}
HTML
<ion-item *ngFor="let usuario of this.usuario">
<ion-label (click)="detalhesUsuario(usuario)">
<h1>UID: {{usuario.uid}}</h1>
<h2>Nome: {{usuario.nomeCompleto}}</h2>
<h2>E-Mail: {{usuario.email}}</h2>
<h2>Acesso: {{usuario.role}}</h2>
</ion-label>
</ion-item>
答案 0 :(得分:0)
您的Cloud Function没有实现实时侦听器。您正在使用get()
,它将读取一次数据,然后停止监听。
通常,云功能不太适合使听众保持生命,因为它们的生存时间不能超过9分钟。
如果您想保持沟通渠道畅通,请考虑以下替代方案:
在允许长期监听器的平台上实现监听器,例如Google App Engine,GKE或几乎任何VM或容器实例提供商。
让您的客户端直接收听Cloud Firestore。到目前为止,这是获取实时更新的最有效方法,因为您无需构建自己的基础结构。实际上,来自Cloud Function的大多数代码可能应该在客户端应用程序内部,而不是在服务器上。