Функции Firebase говорят что-то неопределенное, когда это не так

# #javascript #firebase #google-cloud-firestore

Вопрос:

Получаю следующую ошибку от функций firebase. Я не понимаю, как список регистрации не определен.

Ошибка: Для обновления() требуется либо один объект JavaScript, либо чередующийся список пар поле/значение, за которыми может следовать необязательное предварительное условие. Значение для аргумента «dataOrField» не является допустимым значением Firestore. Нельзя использовать «неопределенный» в качестве значения Firestore (найдено в поле « 0 Список регистрации».). Если вы хотите игнорировать неопределенные значения, включите ignoreUndefinedProperties .

  let curRegister = 0;
                // Take inventory down
                if (typeof eventInfo.currentRegister !== "undefined") {
                  curRegister = parseInt(eventInfo.currentRegister)   1;
                  console.log("KBKBKBBK: "   curRegister);
                } else {
                  curRegister = 1;
                }
                let regList = [];
                // Add the user to the event registration table
                if (typeof eventInfo.registrationList !== "undefined") {
                  regList = eventInfo.registrationList;
                  regList.push(purchaser.id);
                } else {
                  regList = [purchaser.id];
                }
                //update event doc
                admin
                  .firestore()
                  .collection("events")
                  .doc(eventID)
                  .update({
                    registrationList: regList,
                    currentRegister: curRegister,
                  });
                let eventsAttend = [];
                if (typeof purchaser.eventsAttended !== "undefined") {
                  eventsAttend = purchaser.eventsAttended;
                  eventsAttend.push(eventID);
                } else {
                  eventsAttend = [eventID];
                }
                admin
                  .firestore()
                  .collection("fclUsers")
                  .doc(userDocId)
                  .update({ eventsAttended: eventsAttend });
 

Комментарии:

1. Довольно необычно, чтобы это сообщение об ошибке было неправильным. Возможно, вам захочется console.log(JSON.stringify(regList)) проверить его содержимое.

Ответ №1:

Ошибка заключается в том , что первый элемент внутри массива не определен regList[0] , это может произойти, если ваш массив пуст.

Вы должны проверить свои данные на работоспособность, прежде чем отправлять их в Firebase.

  • проверьте его тип с помощью Array.isArray(eventInfo.registrationList)
  • Отфильтруйте пустые и пустые элементы с помощью regList.filter(Boolean)
  • проверьте длину массива, чтобы проверить количество текущего содержимого regList.length > 0