Позволяет напомнить, что многопоточность и параллелизм означает:
- Многопоточность - делать несколько вещей одновременно.
- Параллельность - быстрое переключение между несколькими вещами, тем самым имитируя их одновременно.
Javascript не поддерживает ни первую технику, ни вторую. Вместо этого он выполняет блок кода до конца и затем выполняет следующий блок, который был запланирован с setTimeout
или setInterval
, или тот, который пришел из обработчика события (например, onclick
, onload
).
Теперь, если вы посмотрите на свой код, вы можете увидеть, что он не может быть выполнен без завершения внутренней функции, но эта внутренняя функция не будет выполнена до тех пор, пока внешний не завершится. Вот почему ваше приложение зависает. Вы также можете попробовать следующий код, который демонстрирует вашу проблему:
setTimeout(function() {
x = false;
console.log("won't be invoked");
}, 0);
var x = true;
while(x) {
console.log('looping');
}
P.S. Эта специфика javascript также является причиной отсутствия функции sleep
- просто не имеет смысла останавливать единственного исполнятеля кода, который у вас есть.
Что вы получите, если вы запустите этот 'console.log (data.sessionActive);' ?? –
Я предлагаю добавить пару 'console.log' в ветвях if и распечатать значение resp также в цикле do-while, просто чтобы выяснить, что происходит. – lud1977
@MohitBhardwaj Я правильно понял, когда попытался console.log (data.sessionActive); – mahaDev