Запись данных в облачное хранилище с обещаниями - PullRequest
0 голосов
/ 19 января 2019

Я создаю приложение таймера, которое сохраняет сеансы синхронизации в облачном хранилище. Я хотел бы записать каждую сессию в пожарный магазин как запись, а затем любые расщепления во время сеанса синхронизации как дочерние элементы этой сессии.

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

Я думаю, это как-то связано с тем, что обещание в первом вызове записи не было должным образом разрешено, но я не понял, как это сделать, прочитав много ссылок и документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...