Я новичок в Node.JS и продвинутом Javascript в целом, но я пытаюсь создать приложение диспетчера расписания самостоятельно, и столкнулся с проблемой (о ней я расскажу позже) при попытке выполнить следующий код:
router.get('/', function (req, res) {
var day = new Date(req.query.day);
Location.getLocations(function (err, locations) {
if (locations.length > 0) {
var i;
for (i = 0; i < locations.length; i++) {
var location = locations[i];
Appointment.getAppointments(day, location, function (err, appointments) {
if (err) throw err;
if (appointments.length == 0) {
// CREATE APPOINTMENTS
for (var 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() + 1, 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);
});
}
}
});
}
} else {
// THERE ARE NO LOCATIONS
}
res.render('appointments', { locations: locations });
});
Проблема в следующем:
Когда я пытаюсь выполнить итерацию объекта locations
, а затем выполнить функцию getAppointments
, код не выполняется именно в этот момент. Позже, когда он выполняется, объект location
всегда остается одним и тем же (итерация не работает), что приводит к неожиданному результату (все встречи с одним и тем же/последним местоположением).
Я попытался использовать IIFE (выражение функции с немедленным вызовом) для мгновенного выполнения кода, но когда я сделал это, я не смог получить объект обратного вызова appointments
, и моя логика тоже сломалась.
Заранее спасибо!
let
вместоvar
, скорее всего, это решит ваши проблемы - person Jaromanda X   schedule 29.04.2018let
в этом посте, когда вы прокомментировали: hacks.mozilla.org/2015/07/es6-in-depth-let-and-const - person Adalberto Ferreira   schedule 29.04.2018