const temp = data.reduce(
(acc, cur) => {
acc.bank_props[cur.bank_props.id] = cur.bank_props;
acc.settlements[cur.bank_props.id] = cur.settlements;
return acc;
},
{ bank_props: {}, settlements: {} }
);
const result = {
bank_props: Object.values(temp.bank_props),
settlements: Object.values(temp.settlements),
};
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]),
);
}