首页 > 解决方案 > Firestore 使功能在打开应用程序后触发,然后在更改后触发

问题描述

我希望这个功能在我启动应用程序后触发,然后每次我的 firestore 数据发生变化。

export const getDuettsPlayer1 = (setDuetts) => {
  duettsRef.where("player1", "==", firebase.auth().currentUser.uid)
    .get()
    .then((querySnapshot) => {
      setDuetts(querySnapshot.docs.map(doc => doc.data()));
    })
    .catch((error) => {
      console.log("Error getting document:", error);
    });
}

我已经尝试过这样的:

const getDuettsPlayer1 = (setDuetts) => {
  duettsRef.where("player1", "==", firebase.auth().currentUser.uid)
  .onSnapshot((querySnapshot) => {
      setDuetts(querySnapshot.docs.map(doc => doc.data()));
    })
    .catch((error) => {
      console.log("Error getting document:", error);
    });
}

,但后来我得到了 TypeError: undefined is not a function (near '...}).catch(function (error) {...') 如何正确执行此操作?

标签: javascriptreactjsfirebasereact-nativegoogle-cloud-firestore

解决方案


onSnapshot不返回承诺,所以它没有catch方法。

相反,您通过传入第二个侦听器来处理错误:

  duettsRef.where("player1", "==", firebase.auth().currentUser.uid)
  .onSnapshot((querySnapshot) => {
      setDuetts(querySnapshot.docs.map(doc => doc.data()));
    }, (error) => {
      console.log("Error getting document:", error);
    });

另请参阅有关侦听错误的 Firestore 文档


推荐阅读