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.
async function quaranta() {
return 40;
}
quaranta(); // Promise { 40 }
quaranta().then((v) => console.log(v)); // 40Nawet 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ą.
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):
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:
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)
const raddoppia = async (n) => n * 2;
raddoppia(5); // Promise { 10 }Spróbuj sam
Zdefiniuj funkcję `async function addOne(p)`: przyjmuje Promise zwracające liczbę i zwraca (jako Promise) tę liczbę powiększoną o 1. Użyj await.
Pokaż wskazówkę
const n = await p; return n + 1;
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
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.
Pokaż wskazówkę
await ognuna, poi return a + b.
Rozwiązanie dostępne po 3 próbach