Firestore文档参考的初始化速度不够快

时间:2018-11-21 16:54:09

标签: javascript firebase ionic-framework google-cloud-firestore

我正在尝试创建一个Firebase应用程序,但是每当刷新页面时都会发生某些事情。

list book page

PLACEHOLDER是一个离子项目,其中填充有从firebase.firestore.CollectionReference bookListRef中检索的数据,该数据在称为BooksService的服务中维护,其页面调用的方法为getBookEntries(bookId)。

import { Injectable } from '@angular/core';
import * as firebase from 'firebase/app'; 
import 'firebase/auth'; 
import 'firebase/firestore'; 
import 'firebase/storage';

@Injectable({
  providedIn: 'root'
})
export class BooksService {
  public bookListRef: firebase.firestore.CollectionReference;
  constructor() {
    firebase.auth().onAuthStateChanged(user => { 
      if (user) { 
        this.bookListRef = firebase.firestore().collection(`/bookList`); 
        console.log(this.bookListRef);
      } 
    }); 
  }

  addBook(authorName: string, bookTitle: string, edition: string): Promise<firebase.firestore.DocumentReference>{
     return this.bookListRef.add({
      authorLastName: authorName,
      title: bookTitle,
      edition: edition
    }).then((bookRef)=> 
              bookRef.collection("Entries").add({
                                                  page: "PLACEHOLDER",
                                               })

      );


    }

  getBookList(authorLastName): firebase.firestore.Query{
    return this.bookListRef.where("authorLastName", "==", authorLastName);
  }

  getBookEntries(bookId: string): firebase.firestore.CollectionReference{

        return this.bookListRef.doc(bookId).collection("Entries"); 
    }
  }
}

当我第一次加载页面时,PLACEHOLDER数据加载就很好。但是,当我刷新页面时,由getBookEntries(bookId)执行查询的bookListRef是未定义的。通过在整个代码中插入console.log语句,我发现getBookEntries方法将在构造函数完成bookListRef初始化之前执行。真正令人困惑的是,我正在关注Javabratt的firestore教程EventManager部分,并且这种行为不会出现。在我们各自的服务编写方式以及页面如何调用这些服务方面,我找不到任何根本区别。我在他的示例中添加了console.log语句,并且以某种方式,他的构造函数正在完成Firebase查询并初始化getListDetail()之前的eventListRef

该帖子的其余部分详细介绍了我为完成这项工作而付出的努力,并且可以跳过。 谢谢您的阅读。

我一直试图找到一种方法来确保getBookEntries(bookId)直到构造函数完成后才开始执行。我尝试使用while循环来停止getBookEntries(bookId)直到发生初始化,但是控制从未离开循环,而我却被冻结了。我研究了await / async,但是不能在构造函数上使用,并且ngOnInit不能在服务中使用。

0 个答案:

没有答案