Почему это условие не проверяется?

#javascript #function #if-statement #google-calendar-api #console.log

Вопрос:

В настоящее время я работаю над небольшим проектом, в котором я хочу проверить через API календаря Google, занята ли комната или нет. Для этого я использую эту функцию:

 //checking for change of all values. Then console.log values on change and executing request if busy.
function avalabilityCheck() {
    [...inputs].forEach(input => {
            input.addEventListener('change', function () {
                    if (date.value !== "" amp;amp; startTime.value !== "" amp;amp; endTime.value !== ""
                    ) {let isBusy = true;
                    //looping through all rooms in compartment
                        for (let key in comp_1) {
                            if (comp_1.hasOwnProperty(key)) {
                                let calendarID = comp_1[key];
                                let roomName = key;
                                //console.log(value);
                                //user input that goes into the freebusy query
                                let requestBody = {
                                    timeMin: date.value   "T"   startTime.value   ":00.000Z",
                                    timeMax: date.value   "T"   endTime.value   ":00.000Z",
                                    items: [
                                        {
                                            id: calendarID
                                        }
                                    ],
                                    timeZone: "GMT 01:00"
                                };


                                //make request to gcalendar if rooms are free. Giving back array on what times room is busy.
                                var freeRequest = gapi.client.calendar.freebusy.query(requestBody);

                                //executing request.
                                freeRequest.execute(function (resp) {
                                    var responseObject = JSON.stringify(resp);
                                    console.log(responseObject);
                                    if (resp.calendars[calendarID].busy.length < 1) {
                                        console.log(`${roomName} is free`);
                                    } else { isBusy = false;
                                    console.log("room is Busy");}

                                })

                          }
                        }

                    console.log("finito");
                    if (isBusy === false) {
                        console.log("working?");
                    }
                    else{console.log("not working");}
                    } else {
                        console.log("change date pls");
                    }
                }
            )
        }
    )
}
 

сейчас let isBusy = true; и когда комната занята, я хочу, чтобы IsBusy был фальшивым:

 if (resp.calendars[calendarID].busy.length < 1) {
                                        console.log(`${roomName} is free`);
                                    } else { isBusy = false;
                                    console.log("room is Busy");} 
 

Поэтому, когда я запускаю приложение, консоль должна либо дать :

 console.log("finito");
if (isBusy === false) {
console.log("working?");
 }
else{console.log("not working");}
 

Но он только выдает «finito» на консоль и, по-видимому, не проверяет состояние IsBusy.
Кто — нибудь видит, в чем здесь проблема?
Спасибо!

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

1. Ну, во-первых, вы настраиваетесь isBusy на false то, когда комната занята (должна быть true занята ). И вы устанавливаете isBusy только одну из двух if ветвей, которые вам нужно выполнить, даже если вы инициализируете isBusy , потому что что, если isBusy оператор будет установлен if , а затем if оператор снова запустится и попадет в другую ветвь?>

2. Если условие if (resp.calendars[calendarID].busy.length < 1) не выполнено , остальное говорит, что isBusy это должно быть false , или это неверно?

3. Ваш код плохо отформатирован. Отступ части вокруг «finito» неправильный, и у вас есть утверждения, следующие в той же строке, что и открывающая скобка. Важно то, что execute обратный вызов выполняется только позже. Таким образом, вы получите вывод «finito», когда ни один из этих обратных вызовов еще не выполнен.