async function

Deklaruje funkcję asynchroniczną, która zawsze zwraca obietnicę i może używać w środku słowa await.

Zwraca
Obietnicę (Promise), która spełnia się wartością z return albo zostaje odrzucona rzuconym błędem.
Na tej stronie

Przykład

#
JavaScript
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms))

async function loadProfile(name) {
  await wait(300)
  return { name, level: 7 }
}

const promise = loadProfile('Ania')
console.log(promise)

const profile = await promise
console.log(profile)
Konsola
Promise { <pending> }
{ name: 'Ania', level: 7 }

Definicja i zastosowanie

#

Słowo async przed funkcją zmienia ją w funkcję asynchroniczną. Taka funkcja zawsze zwraca obietnicę: wartość z return staje się wartością spełnionej obietnicy, a rzucony wyjątek powoduje jej odrzucenie.

Wewnątrz funkcji async możesz używać await, żeby poczekać na wynik innej obietnicy. Kod wygląda wtedy jak zwykły, wykonywany z góry na dół, a błędy łapiesz znanym blokiem try...catch zamiast metodą catch().

async działa z każdą formą funkcji: deklaracją, wyrażeniem, funkcją strzałkową (async () => {}) i metodą w obiekcie lub klasie. Wywołanie funkcji async nie blokuje programu. Kod zapisany po wywołaniu wykona się od razu, zanim funkcja skończy pracę.

Składnia

#
Składnia
async function name(param1, param2) {
  …
}

const name = async (param) => {
  …
}

Więcej przykładów

#
Wyjątek odrzuca obietnicę
JavaScript
async function buyCourse(price, balance) {
  if (balance < price) throw new Error('Za mało monet')
  return balance - price
}

buyCourse(50, 80).then((rest) => console.log('Zostało:', rest))
buyCourse(90, 80).catch((error) => console.log('Błąd:', error.message))
Konsola
Zostało: 30
Błąd: Za mało monet
Funkcja strzałkowa i metoda
JavaScript
const getPoints = async () => 120

const shop = {
  async buy(item) {
    const points = await getPoints()
    return `${item}: zostało ${points - 100} punktów`
  }
}

console.log(await shop.buy('Nowy avatar'))
Konsola
Nowy avatar: zostało 20 punktów

Obsługa przeglądarek

#

Szeroko dostępne

Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.

  • Chrome
  • Edge
  • Firefox
  • Safari

Dobre praktyki

#
  • Samo wywołanie funkcji async daje obiekt Promise. Żeby dostać wynik, użyj await albo then().
  • Nie oznaczaj funkcji jako async, jeśli nie robi nic asynchronicznego. Niepotrzebnie zamienisz jej wynik w obietnicę.
  • Obsługuj błędy funkcji async przez try...catch w jej wnętrzu albo catch() przy wywołaniu.

Powiązane hasła

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.