【问题标题】:Cloud Functions(W/Firestore) Realtime Updates?Cloud Functions(W/Firestore)实时更新?
【发布时间】:2019-09-14 02:58:45
【问题描述】:

这是一个令人讨厌的问题,我有一个云函数,它将所有数据带到某个集合(用户)中,通过应用程序调用(应用程序调用),然后我使用 *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>

【问题讨论】:

  • 我虽然是返回一些路径而不是集合,然后使用 AngularFire2 返回数据,现在可以试试...
  • 你在使用 angularfire2 吗?
  • 仅在 Ionic APP 中,我不在 admin firestore/functions sdk 中使用它

标签: angular google-cloud-firestore google-cloud-functions ionic4


【解决方案1】:

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

一般来说,Cloud Functions 不适合让听众保持活力,因为他们的寿命不能超过 9 分钟。

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

  1. 确实允许长时间监听的平台上实现监听器,例如 Google App Engine、GKE 或几乎任何 VM 或容器实例的提供商。

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

【讨论】:

  • 我想让它安全,这就是我使用 CFunctions 的全部内容。在2选项中,您的意思是直接在应用程序中更新它??除了前端,我如何使它安全?我虽然做云功能来检查,然后检索集合的路径,所以我可以使用 valueChanges 或快照
  • 所以我不应该使用云功能来保护我的应用程序/验证数据?我已经在 Firestore 中设置了一些规则......
  • 我并不是说你不应该使用它们,因为这取决于你。但是,如果您不直接从客户端访问 Firestore,那么您肯定会失去它的一些价值——例如它的实时功能。可以通过规则保护对数据的所有访问。但通过规则处理读取访问也很常见,并让所有写入都通过 Cloud Functions,因为它是大多数开发人员更熟悉的“安全模型”。
猜你喜欢
  • 2019-07-12
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多