Результаты пакетного обновления Firebase в Тайм-ауте запроса - PullRequest
0 голосов
/ 03 апреля 2020

Проблема

Я использую пакетный метод Firestore для пакетного обновления нескольких коллекций (пользователей и событий). Я обновляю 2 поля в коллекции событий (массив и числовое поле) и 1 в поле пользователей.

Пакетные обновления происходят после нескольких вызовов get () для проверки некоторых данных и в пределах блока обещаний.

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

Что я делаю не так? Как я могу это исправить, чтобы запрос был отправлен и запрос остановился?

Код

exports.markAttended = (req, res) => {
  let batch = db.batch();
  let eventDoc = db.doc(`/events/${req.params.eventId}`);
  let userDoc = db.doc(`/users/${req.user.userName}`);
  let attending = [];
  let attendCount = 0;
  let participants = [];

  eventDoc
    .get()
    .then(doc => {
      if (doc.empty) {
        return res.status(404).json({ general: `Event does not exist` });
      } else {
        if (doc.data().attending === doc.data().cap) {
          return res
            .status(409)
            .json({ general: `Event Full. It has a cap of ${eventDoc.cap}` });
        }
        eventUpdated = true;
        let orgParticipants = doc.data().participants;
        orgParticipants.push(req.user.userName);
        participants = orgParticipants;
        attendCount = doc.data().attending + 1;
        return userDoc
          .get()
          .then(doc => {
            if (doc.data().attending.includes(req.params.eventId)) {
              return res
                .status(409)
                .json({ general: `Already attending this event` });
            }

            let orgAttending = doc.data().attending;
            orgAttending.push(req.params.eventId);
            attending = orgAttending;

            batch.update(userDoc, { attending: attending });
            batch.update(eventDoc, { participants: participants });
            batch.update(eventDoc, { attending: attendCount });

            return batch
              .commit()
              .then(() => {
                return res.status(200);
              })
              .catch(err => {
                return res.status(500).json({ error: err });
              });
          })
          .catch(err => {
            return res
              .status(500)
              .json({ error: `Error getting User. ${err}` });
          });
      }
    })
    .catch(err => {
      return res.status(500).json({ error: `Error getting Event: ${err}` });
    });

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