Как получить данные из Firestore без подписки - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь получить отдельный элемент (путь) для конкретного пользователя в Firestore, используя angularfire2 / angular 6.

В настоящее время я сохраняю изображение в базе данных Firestore. Затем я добавляю запись в базу данных Firestore с UID пользователя и путем к файлу.

Я пытаюсь получить один элемент (путь), просматривая UID пользователя. Я знаю, как использовать запросы в Firestore. Я хочу получить путь без подписки.

Кто-нибудь знает, как получить данные из Firestore без подписки?

getUserImage(uid) {
      const imageRef = this.afs.collection('/users', ref => ref.where('userUID', '==', uid));
      return imageRef.snapshotChanges().pipe(map(results1 => {
        return results1.map((x) => {
          return x.payload.doc.data() as User;
        });
       }));
    }

Пример: если я получаю информацию об одном пользователе; Могу ли я сделать это без подписки?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Единственный способ получить данные из коллекции FireStore - это подписка; однако вы можете управлять потоком данных до подписки с помощью команд RXJS. Примером этого является:

В этом примере this.afs ссылается на мой AngularFireStore, затем я собираю информацию о конкретном пользователе. Затем я запускаю функцию snapshotChanges (), предоставляемую FirebaseStore.

Теперь, чтобы получить конкретные данные, которые вы ищете, вы хотите запустить все RXJS 6 с .pipe. Думайте об этом как о Марио в туннеле. Вы начинаете с трубы в первую очередь. Теперь вы хотите использовать оператор MAP, чтобы изменить то, что вы хотите. В этом случае я хочу отобразить, а затем получить полезную нагрузку.

Теперь вы можете запустить функцию .data (), чтобы вернуть все ваши данные; Тем не менее, я запускаю данные .get, потому что я хочу вернуть только определенные данные.

Как только вы определились с тем, что вам нужно, вы можете подписаться, что вернет то, что вы указали в трубе.

  loadUser(user) {
    this.afs.doc<any>(`users/${user}`).snapshotChanges().pipe(
      map(actions => {
        console.log('Getting image reference from user');
        const imageRef = actions.payload.get('appPhotoRef');
        console.log(imageRef);
        return imageRef;
      })
      ).subscribe((data) => {
      console.log('Getting download URL');
      console.log(data);
      return this.getDownloadURL(data);
    });
  }
0 голосов
/ 06 сентября 2018

Вы можете использовать простой старый JavaScript API для получения документа .Он предоставляет метод get (), который выполняет одноразовый поиск документа.Из связанной документации:

var docRef = db.collection("cities").doc("SF");

docRef.get().then(function(doc) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
    } else {
        // doc.data() will be undefined in this case
        console.log("No such document!");
    }
}).catch(function(error) {
    console.log("Error getting document:", error);
});

Все, что вам нужно, - это экземпляр базы данных Firestore для начала работы.

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