Cloud Functions(W/Firestore) 实时更新?

Cloud Functions(W/Firestore) Realtime Updates?

这是一个棘手的问题,我有一个 Cloud Function,它将所有数据放入某个集合(用户)中,通过应用程序调用(应用程序调用),然后我通过使用获取所有用户 html *ngFor。 当我删除、创建或更新此集合中的某些数据时,问题就来了,它永远不会相应地更新,需要我重新加载页面。 有没有可能把这个功能变成实时功能?

函数导出:

  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>

您的云函数未实现实时侦听器。您正在使用 get(),它会读取一次数据,然后停止侦听。

一般来说,Cloud Functions 不适合让听众存活,因为它们的存活时间不能超过 9 分钟。

如果您想保持沟通渠道畅通,请考虑以下备选方案:

  1. 允许长期侦听器的平台上实施侦听器,例如 Google App Engine、GKE 或几乎任何其他平台VM 或容器实例的提供者。

  2. 让您的客户端直接收听 Cloud Firestore。这是迄今为止获取实时更新的最有效方式,因为您不必构建自己的基础架构。事实上,您的 Cloud Functions 中的大部分代码可能应该在您的客户端应用程序中,而不是在服务器上。