WebAPI браузера поедоставляет вещи типа setTimeout, или async await, коллбек-функции которые закидываются в очередь, а оттуда в порядке своей приоритетности попадают в стек по очереди. Промисы обрабатываются в приоритетном порядке.Обычные callback-функции не попадают в очередь, они вызываются в общем стеке. Кроме промисов в приоритетную очередь микрозадач функция может быть добавлена через queueMicrotask(function).
А что если "асинхронные" операции занимают много памяти и выполняются долго. Если они выполняются в том же стеке, то они также перекроют доступ ко всем остальным операциям?Асинхронные операции выполняются отдельными служебными потоками параллельно с основным стеком. Поэтому сами они не могут заблокировать основной стек. По завершению/таймеру асинхронная операция кладёт функцию в очередь микро- или макрозадач.
{
"status": "error"
"error": {
"form": {
"email": "Пользователь с таким адресом электронной почты уже зарегистрирован",
"password": "Слишком короткий пароль. Минимальная длина 8 символов."
}
}
}
{
"status": "ok"
"location": "/email-verification"
}
const deepEqual = (a, b) => {
if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') {
return a === b;
}
const aKeys = Object.keys(a);
const bKeys = Object.keys(b);
if (aKeys.length !== bKeys.length) {
return false;
}
return aKeys.every(
(key) => bKeys.includes(key) && deepEqual(a[key], b[key]),
);
}
const p = new Promise(...).then(...).then(...).catch();
можно записать какconst p1 = new Promise(...);
const p2 = p1.then(...);
const p3 = p2.then(...);
const p4 = p3.catch(...);
axios.get(url[, config])