Нужно ли использовать подписку с .valueChanges () при чтении данных из Cloud Firestore? - PullRequest
0 голосов
/ 11 апреля 2019

Ранее, используя базу данных в реальном времени, я привык использовать подписку для отслеживания изменений в базе данных.Облачный Firestore, однако, имеет .valueChanges (), который, кажется, делает это автоматически, поэтому мне все еще нужно использовать подписку rxjs?

Мой код ниже полностью работает без проблем, я спрашиваю о _subscription: Subscription; и не.valueChanges().subscribe

import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from '@angular/fire/firestore';

import * as firebase from 'firebase/app';
import 'firebase/database';
import 'rxjs/Rx';

import { Observable, pipe, of, Subscription } from 'rxjs';
import { switchMap } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class FirebaseService {

  _data: any = [];
  _subscription: Subscription;
  itemsDocument_data: AngularFirestoreDocument<any[]>;
  itemsCollection_data: AngularFirestoreCollection<any[]>;

  constructor(private _afDB: AngularFirestore) {
    await _dbGeData();
  }

  private async _dbGeData() {
    try {

      if (this._fbData_subscription_User === undefined) {
        this.itemsDocument_users = this._afDB.collection("_myDataPath").doc("_mySecondDatapath");
        this._subscription_data = await this.itemsDocument_data.valueChanges().subscribe((items) => {
          this._data = [];
          for (let i in items) {
            this._data.push = items[i];
          }

          //items (object) is now this._data (Array)

          console.log("items (object)", items);
          console.log("this._data (Array)", this._data);

          return;
        });
      }
    } catch (e) {
      console.error("when getting data", e);
      return;
    }

    return;

  }

  ngOnDestroy() {
    if (this._subscription !== undefined) {
      this._subscription.unsubscribe();
    }
  }

}

1 Ответ

0 голосов
/ 11 апреля 2019

valueChanges() возвращает наблюдаемое, вы должны подписаться на него так или иначе, чтобы что-то действительно произошло.

Разве вы не можете остаться в этом наблюдаемом и подписаться в самый последний момент (как вшаблон с AyncPipe)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...