承诺将数据写入Cloud Firestore

时间:2019-01-18 23:32:41

标签: reactjs firebase google-cloud-firestore

我正在构建一个计时器应用程序,它将计时会话保存到Cloud Firestore。我想将每个会话记录到Firestore中作为记录,然后将计时会话期间的所有拆分作为该会话的子元素。

const db = firebase.firestore();
const settings = {timestampsInSnapshots: true};
db.settings(settings);
const sessionsRef = db.collection("sessions")
const user = firebase.auth().currentUser;

首次写入是在startStop()函数中启动的:

startStop() {
    const status = this.state.running;

    if(!this.state.sessionRef) //first time starting timer, record new database entry
    {
      console.log("writing session to cloudstore")
      const user = firebase.auth().currentUser;

  const sessionRef = sessionsRef.add({
        start_time: firebase.firestore.FieldValue.serverTimestamp(),
        user: user.uid,
        goal: this.state.goal, 
      }).then( () =>{
      console.log("Write successful");
      console.log(sessionRef)
      this.setState({sessionRef: sessionRef});
      return sessionRef;
      }
      );
    }
    else //need log split in firebase
    {
      const sessionRef = this.state.sessionRef
      console.log(sessionRef.id)
      const action = (this.state.running ? "stop":"start");

      const splitRef = sessionsRef.doc(sessionRef.id).push({
        split_time: firebase.firestore.FieldValue.serverTimestamp(),
        action: action
      })
    }

在计时器开始运行后,按下调用stopStop()函数的拆分按钮时,就会发生问题。在这种情况下,出现以下错误:

FirebaseError:函数CollectionReference.doc()要求其第一个参数的类型为非空字符串,但是它是:undefined

我认为这与第一次写调用中的承诺没有得到适当解决有关,但是我没有从阅读大量参考文献和文​​档中弄清楚如何做到这一点。

0 个答案:

没有答案