【问题标题】:Property 'then' does not exist on type Observable<QuerySnapshot<DocumentData>>Observable<QuerySnapshot<DocumentData>> 类型上不存在属性“then”
【发布时间】:2020-05-03 11:12:12
【问题描述】:
db.collection("cities").get()
  .then(function(querySnapshot) {
    querySnapshot.forEach(function(doc) {
      // doc.data() is never undefined for query doc snapshots
      console.log(doc.id, " => ", doc.data());
  });

我正在尝试读取集合的多个文档,但随后出现错误。 请帮我解决这个问题。

【问题讨论】:

    标签: javascript angular firebase google-cloud-firestore


    【解决方案1】:

    如果你想把 is 当作一个 Promise,你可以把它转换成一个 Promise。这不是黑客攻击,一旦get() 只产生一个发射。但是 Firebase 希望您能够处理来自 get() 的流。无论如何,将其转换为承诺:

    db.collection("cities").get().toPromise()
      .then((querySnapshot: QuerySnapshot<DocumentData>) => {
        querySnapshot.forEach((doc: any) => {
          // doc.data() is never undefined for query doc snapshots
          console.log(doc.id, " => ", doc.data());
      });
    

    如果您决定处理来自 get() 的流式传输,正如 Firebase API 所期望的那样:

    db.collection("cities").get()
      .subscribe((querySnapshot: QuerySnapshot<DocumentData>) => {
        querySnapshot.forEach((doc: any) => {
          // doc.data() is never undefined for query doc snapshots
          console.log(doc.id, " => ", doc.data());
      });
    

    [更新] 1:基于文档,有一个用于获取快照的新 API,使用 onSnapshot 方法:

    db.collection("cities")
      .onSnapshot((querySnapshot: QuerySnapshot<DocumentData>) => {
        querySnapshot.forEach((doc: any) => {
          // doc.data() is never undefined for query doc snapshots
          console.log(doc.id, " => ", doc.data());
      });
    

    【讨论】:

    • 您好,这里的订阅已弃用,我应该使用什么?谢谢
    • docs,你可以试试onSnapshot的方法。它存在于CollectionReference 中,这是db.collection('cities') 和集合内单个DocumentReference 的上述情况,就像我们在docs 示例中一样。
    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 2018-10-15
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多