Przejdź do głównej treści
eLearner.app
Moduł 7 · Lekcja 2 z 426/32 w kursie~12 min
Lekcje modułu (2/4)

async / await

async/await to przejrzystsza składnia do pracy z obiektami Promise: kod czyta się jak kod synchroniczny, ale pod maską wykorzystuje dokładnie te same obietnice, co w poprzedniej lekcji.

async function

Funkcja zadeklarowana z użyciem słowa kluczowego async zawsze zwraca obiekt Promise.

JS
async function quaranta() {
  return 40;
}

quaranta(); // Promise { 40 }
quaranta().then((v) => console.log(v)); // 40

Nawet jeśli zwrócisz „zwykłą” wartość, funkcja automatycznie opakuje ją w rozstrzygnięte Promise.

await

Wewnątrz funkcji oznaczonej jako async możesz użyć słowa kluczowego await przed obietnicą (Promise): wykonanie kodu zostanie wstrzymane do momentu rozstrzygnięcia obietnicy, a następnie zostanie wznowione z uzyskaną wartością.

JS
async function somma() {
  const a = await Promise.resolve(10);
  const b = await Promise.resolve(20);
  return a + b; // 30
}

Odpowiednik w stylu .then (bardziej rozwlekły):

JS
function somma() {
  return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}

await propaguje błędy

Jeśli obietnica zostanie odrzucona (rejected), await ponownie rzuci błąd. Możesz go przechwycić za pomocą standardowego bloku try/catch:

JS
async function leggi() {
  try {
    const x = await Promise.reject(new Error('no'));
    return x;
  } catch (err) {
    return 'errore: ' + err.message;
  }
}

leggi(); // Promise { 'errore: no' }

Asynchroniczne funkcje strzałkowe (Arrow async)

JS
const raddoppia = async (n) => n * 2;
raddoppia(5); // Promise { 10 }

Spróbuj sam

Ćwiczenie#js.m7.l2.e1
Próby: 0Ładowanie...

Zdefiniuj funkcję `async function addOne(p)`: przyjmuje Promise zwracające liczbę i zwraca (jako Promise) tę liczbę powiększoną o 1. Użyj await.

Ładowanie edytora...
Pokaż wskazówkę

const n = await p; return n + 1;

Rozwiązanie dostępne po 3 próbach

Ćwiczenie powtórzeniowe

Ćwiczenie#js.m7.l2.e2
Próby: 0Ładowanie...

Zdefiniuj funkcję asynchroniczną `sumTwo(pa, pb)`: przyjmuje dwie obietnice (Promise) zwracające liczby i zwraca ich sumę. Użyj dwóch kolejnych wywołań await.

Ładowanie edytora...
Pokaż wskazówkę

await ognuna, poi return a + b.

Rozwiązanie dostępne po 3 próbach