我正在构建一个计时器应用程序,它将计时会话保存到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
我认为这与第一次写调用中的承诺没有得到适当解决有关,但是我没有从阅读大量参考文献和文档中弄清楚如何做到这一点。