Как дождаться результата выполнения асинхронной операции?
Асинхронность и Event Loop
Результат асинхронной операции дожидаются через `await` (в async-функции), `.then()` у промиса или колбэк. Современный способ — `async/await`.
Способы дождаться результата
async/await (современный)
async function load() {
const data = await fetchData(); // ждёт разрешения промиса
console.log(data);
}await приостанавливает функцию до разрешения промиса, не блокируя поток. Ошибки — через try/catch:
try {
const data = await fetchData();
} catch (e) {
handleError(e);
}.then() у промиса
fetchData()
.then((data) => console.log(data))
.catch((error) => handleError(error));Колбэк (legacy)
getData((error, data) => {
if (error) handleError(error);
else console.log(data);
});Дождаться нескольких
// Параллельно
const [a, b] = await Promise.all([fetchA(), fetchB()]);
// Все со статусами
const results = await Promise.allSettled([...]);Нюансы
awaitработает только внутриasync-функции (или top-level await в модулях).- Нельзя «синхронно» дождаться промиса — только через await/then/колбэк.
- Не блокировать поток ожиданием (асинхронность освобождает поток).
Коротко для собеседования
Результат асинхронной операции дожидаются через async/await (const data = await fetchData(), ошибки в try/catch) — современный способ, или .then()/.catch() у промиса, или колбэк (legacy). Несколько — через Promise.all. await работает в async-функции (или top-level в модулях); синхронно дождаться промиса нельзя.