📜  AngularFireDatabase nãoémais um observable?? - Javascript(1)

📅  最后修改于: 2023-12-03 14:39:13.962000             🧑  作者: Mango

AngularFireDatabase não é mais um observable? - JavaScript

O AngularFireDatabase é uma biblioteca de integração do Angular com o Firebase Realtime Database. Inicialmente, o AngularFireDatabase era baseado em observables, que são objetos assíncronos muito utilizados no Angular. No entanto, recentemente houve alterações na biblioteca que fizeram com que o AngularFireDatabase deixasse de ser um observable direto.

Observables no Angular

Observables são objetos que representam fluxos de dados assíncronos. Eles são muito utilizados no Angular para lidar com operações assíncronas, como requisições HTTP e manipulação de dados em tempo real. Os observables possuem métodos como subscribe, pipe e map, que permitem a manipulação de dados de forma simples e concisa.

AngularFireDatabase antes das alterações

Antes das alterações recentes no AngularFireDatabase, era possível utilizar os métodos de um observable diretamente em uma referência do Realtime Database. Por exemplo:

import { AngularFireDatabase } from '@angular/fire/database';

constructor(private db: AngularFireDatabase) {
}

getData() {
  // Referência a um nó do Realtime Database
  const ref = this.db.object('path/to/data');

  // Observable fornecido pelo AngularFireDatabase
  const data$ = ref.valueChanges();

  // Utilização do método subscribe para obter os dados
  data$.subscribe(data => {
    console.log(data);
  });
}

Nesse exemplo, ref.valueChanges() retorna um observable que contém os dados do nó path/to/data. Esse observable pode ser utilizado diretamente com o método subscribe para obter os dados e lidar com eles.

AngularFireDatabase após as alterações

Com as últimas atualizações do AngularFireDatabase, a biblioteca deixou de fornecer diretamente observables. Em vez disso, foram adicionados métodos assíncronos que retornam promessas. Por exemplo:

import { AngularFireDatabase } from '@angular/fire/database';

constructor(private db: AngularFireDatabase) {
}

async getData() {
  // Referência a um nó do Realtime Database
  const ref = this.db.object('path/to/data');

  // Utilização do método snapshotChanges para obter os dados
  const snapshot = await ref.snapshotChanges().toPromise();
  const data = snapshot.payload.val();

  console.log(data);
}

Nesse exemplo, ref.snapshotChanges().toPromise() retorna uma promessa que responde com um snapshot do nó path/to/data. É possível aguardar a resolução da promessa com o operador await e, em seguida, obter os dados utilizando snapshot.payload.val().

Embora essa mudança possa exigir uma atualização no código existente, ela permite um código mais transparente e consistente com o Firebase SDK oficial. Além disso, o uso de promessas pode ser mais familiar para desenvolvedores que não estão acostumados com observables.

Conclusão

O AngularFireDatabase deixou de ser diretamente um observable, passando a fornecer métodos assíncronos baseados em promessas para obter os dados do Realtime Database do Firebase. Essa mudança visa oferecer um código mais consistente com o Firebase SDK oficial e pode facilitar a compreensão e adoção da biblioteca por parte dos desenvolvedores.