Я создаю приложение таймера, которое сохраняет сеансы синхронизации в облачном хранилище. Я хотел бы записать каждую сессию в пожарный магазин как запись, а затем любые расщепления во время сеанса синхронизации как дочерние элементы этой сессии.
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
Я думаю, это как-то связано с тем, что обещание в первом вызове записи не было должным образом разрешено, но я не понял, как это сделать, прочитав много ссылок и документации.