Вопрос проверяет знание основных инструментов JavaScript для обработки асинхронных операций, что необходимо для написания неблокирующего кода.
Асинхронность в JavaScript — это фундаментальная концепция, позволяющая выполнять длительные операции (например, сетевые запросы или чтение файлов) без блокировки основного потока выполнения. Это критически важно для создания отзывчивых веб-приложений.
.then() для обработки успеха и .catch() для обработки ошибок, что позволяет строить цепочки вызовов.async объявляет асинхронную функцию, а await приостанавливает её выполнение до разрешения промиса, делая код линейным и легко читаемым.Сравним подходы на примере имитации получения данных:
// 1. Callback (старый стиль)
function fetchDataCallback(callback) {
setTimeout(() => {
callback(null, 'Данные получены');
}, 1000);
}
fetchDataCallback((err, data) => {
if (err) console.error(err);
else console.log(data); // Через секунду: 'Данные получены'
});
// 2. Promise
function fetchDataPromise() {
return new Promise((resolve, reject) => {
setTimeout(() => resolve('Данные получены'), 1000);
});
}
fetchDataPromise()
.then(data => console.log(data))
.catch(err => console.error(err));
// 3. Async/Await (современный стиль)
async function getData() {
try {
const data = await fetchDataPromise(); // Ждём разрешения промиса
console.log(data);
} catch (err) {
console.error(err);
}
}
getData();Эти инструменты используются повсеместно: для выполнения HTTP-запросов (fetch API, axios), работы с базами данных, чтения файлов в Node.js, обработки пользовательских событий и любых операций, где время выполнения неизвестно или велико.
Вывод: Для нового кода предпочтительно использовать async/await из-за чистоты и читаемости, но понимание промисов обязательно, так как async/await построен на них. Колбэки до сих пор встречаются в старом коде и некоторых API, поэтому их также нужно знать.