#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», когда ни один из этих обратных вызовов еще не выполнен.