Średniozaawansowany
+60 XP

👋 Zacznij uczyć się JavaScript już teraz — za darmo!

📖

Obietnice i async/await

Zrozum programowanie asynchroniczne przez proste analogie

🍕

Obietnica (Promise) = zamówienie pizzy

Zamówiłeś pizzę. Dali ci bilet (obietnicę) i powiedzieli 'poczekaj'. Nie stoisz przy ladzie — zajmujesz się swoimi sprawami. Kiedy pizza będzie gotowa — zadzwonią do ciebie. Obietnica w kodzie działa tak samo: zaczynasz zadanie, robisz inne rzeczy i dostajesz wynik kiedy jest gotowy.

Синхронний vs асинхронний код

Синхронний — кожна операція чекає поки попередня завершиться:

javascript
console.log('1');
console.log('2'); // виконається після 1
console.log('3'); // виконається після 2
// Вивід: 1, 2, 3

Асинхронний — не блокує виконання, результат приходить пізніше:

javascript
console.log('1');
setTimeout(() => console.log('2'), 1000); // через 1 секунду
console.log('3'); // виконується одразу, не чекає setTimeout
// Вивід: 1, 3, 2

Чому це важливо? Мережеві запити (fetch) займають час — 100мс, 1с, 5с. Якби fetch був синхронним — браузер заморозив би вкладку до отримання відповіді!

javascript
💬

Promise може бути в трьох станах: pending (очікує), fulfilled (виконано), rejected (відхилено). .then() реагує на fulfilled, .catch() — на rejected.

async/await — зручний синтаксис для Promise

async/await — це не нова концепція, це просто зручніший запис для роботи з Promise:

javascript
// Той самий код але читабельніше:
async function fetchData() {
  try {
    const result = await someAsyncOperation(); // чекаємо результату
    console.log(result);
  } catch (error) {
    console.log('Помилка:', error);
  }
}

Правила:

  • await можна використовувати ТІЛЬКИ всередині async функції
  • async функція завжди повертає Promise (навіть якщо return звичайне значення)
  • await зупиняє виконання ТІЛЬКИ всередині async функції, не блокує браузер
javascript
💬

Обидва варіанти роблять те саме. async/await читається як звичайний код — зверху вниз. Рядок 'Виконується ОДРАЗУ' виведеться першим!

await перед функцією що не повертає Promise просто повертає значення одразу — помилки не буде. Але це марнотратно і заплутує читача. Використовуй await тільки з async функціями або функціями що повертають Promise.

Komentarze

Zaloguj się lub Zacznij aby zostawić komentarz.