Синхронное выполнение запросов мангуста - PullRequest
0 голосов
/ 27 июня 2018

Я довольно новичок в node.js / mongoose, и я столкнулся с некоторыми трудностями, заставляя мой код работать как задумано. По сути, у меня есть Массив, содержащий некоторые идентификаторы в отсортированном порядке, и я хочу проверить мои резервирования, если они содержат эти идентификаторы в определенном состоянии (та же дата резервирования, временной интервал и т. Д.)

Кажется, я не могу заставить свою логику работать, которая в основном должна использовать следующий подход: прогонять массив таблиц от индекса 0 до длины индекса-1, для каждого индекса должен быть запрос findOne ({]), если нет резервирования существует с этим идентификатором таблицы, резервирование должно быть помещено и выйти из цикла, если резервирование существует, перейти к следующему индексу и повторять, пока массив не будет итеративным образом от 0 ... n (особый порядок, в котором сортируется массив, важен здесь следует всегда отдавать предпочтение наименее подходящим). Если ни один из таблиц не является «свободным» для создания нового резервирования, он должен отправить ответное сообщение о том, что каждая таблица уже зарезервирована. Кто-нибудь, кто мог бы помочь мне в моей проблеме? Буду признателен за любые подсказки!

app.post('/api/reservations', (req, res) => {
  const resDate = new Date(req.body.reservationDate).toISOString();
  const queryDate = new Date(req.body.reservationDate);
  const tableDict = req.body.tableDict;
  const slot = req.body.timeSlot;
  const seats = req.body.seats;
  const restaurant = req.body.restaurant;
  const customer = req.body.customer;
  const comment = req.body.comment;

  function gteQueryDate(date) {
    return date.toISOString();
  }

  function lteQueryDate(date) {
    date.setDate(date.getDate() + 1);
    return date.toISOString();
  }

  const gteDate = gteQueryDate(queryDate);
  const lteDate = lteQueryDate(queryDate);

  const sortedTables = [];
  for (i = 0; i < tableDict[slot].length - 1; i++) {
    if (tableDict[slot][i] !== null && tableDict[slot][i].seats >= seats) {
      sortedTables.push([tableDict[slot][i]._id, tableDict[slot][i].seats]);
    }
  }

  sortedTables.sort(function(a, b) {
    return a[1] - b[1];
  });

  var createReservation = function(tableId) {
    console.log("called function with id : " + tableId);
    Reservation.findOne({
        'restaurant': restaurant,
        'timeSlot.slot': slot,
        'timeSlot.table': tableId,
        'reservationDate': {
          '$gte': gteDate,
          '$lte': lteDate
        }
      })
      .then(reservation => {
        if (!reservation) {
          console.log("can create reservation with id: " + tableId);
          var timeSlot = [{
            'slot': slot,
            'table': tableId
          }];
          const newReservation = new Reservation({
            seats: seats,
            comment: comment,
            timeSlot: timeSlot,
            customer: customer,
            restaurant: restaurant,
            reservationDate: resDate
          });
          newReservation.save()
            .then(result => {
              res.send(result);
            })
            .catch(err => {
              console.log(err);
            });
        } else {
          console.log("reservation with id: " + tableId + " exists already.");
        }
      })
      .catch(err => {
        console.log(err);
      });
  }

  for (j = 0; j < sortedTables.length; j++) {
    var tableId = sortedTables[j][0];
    createReservation(tableId);
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...