Создание списка объектов вручную в Mongoose - PullRequest
0 голосов
/ 01 мая 2018

Я создаю приложение Schedule Manager с использованием node.JS + Express + Mongoose и пытаюсь найти встречи в определенный день и место. Если встречи не были найдены, я хочу создать пустые встречи между начальной и конечной датами, чтобы они были готовы, когда мне это нужно.

Вопрос:

Могу ли я как-то вернуть только что созданные объекты встречи вместо повторного вызова Appointments.find? Если это возможно, каков наилучший способ сделать это?

Пример: я представляю что-то вроде создания нового массива и добавления каждого объекта через итерацию.

Вот код для моей модели:

Appointment.find(query)
    .exec()
    .then((appointments) => {
        if (appointments.length == 0) {
            Location.findById(locationId)
            .exec()
            .then((location) => {
                for (let j = location.available_time_start; j <= location.available_time_end; j += location.appointment_duration) {
                    var newAppointment = new Appointment();

                    newAppointment.start_date = new Date(day.getFullYear(), day.getMonth(), day.getDate(), j);
                    newAppointment.appointment_duration = location.appointment_duration;
                    newAppointment.location = location.id;
                    newAppointment.booked = false;
                    newAppointment.locked = false;

                    Appointment.createAppointment(newAppointment, function (err, appointment) {
                        if (err) throw err;
                        console.log(appointment.location + ' - ' + appointment.start_date);
                    });
                }

                // I WANT TO RETURN THE APPOINTMENTS HERE!
            })
            .catch((err) => {
                console.log("Error while creating appointments: " + err);
            });
        } else {
            // IT RETURNS AS EXPECTED WHEN PREVIOUSLY INCLUDED!
            callback(null, appointments);
        }
    })
    .catch((err) => {
        console.log("Error while searching for appointments: " + err);
    });

1 Ответ

0 голосов
/ 01 мая 2018

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

                let newAppointments = Array();

                for (let j = location.available_time_start; j <= location.available_time_end; j += location.appointment_duration) {
                    let newAppointment = new Appointment();

                    newAppointment.start_date = new Date(day.getFullYear(), day.getMonth(), day.getDate(), j);
                    newAppointment.appointment_duration = location.appointment_duration;
                    newAppointment.location = location.id;
                    newAppointment.booked = false;
                    newAppointment.locked = false;

                    newAppointments.push(newAppointment);
                    newAppointment.save()
                    .then((appointment) => {
                        console.log(appointment.location + ' - ' + appointment.start_date);
                    })
                    .catch((err) => {
                        console.log("Error while creating appointments: " + err);
                    })
                }

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