TypeScript Academy · Oppitunti

Virheenkäsittely asynkronisessa TypeScript-koodissa

Hallinnoikaa asynkronisia virheitä tyypitettyjen wrapperien ja utilityjen avulla

Oppitunti 4/413 vaihetta

Virheenkäsittely asynkronisessa TypeScript-koodissa on ilmainen TypeScript Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu TypeScript Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.

Tervetuloa

Asynkroniset funktiot lisäävät virheenkäsittelyn monimutkaisuutta. TypeScript varmistaa, että käsittelette Promise-hylkäykset asianmukaisesti.

Async/Await-try-catch

Ympäröikää await-kutsut try-catch-rakenteella Promise-hylkäysten käsittelemiseksi.
async function loadUser(id: number): Promise<User> {
  try {
    return await api.getUser(id);
  } catch (err: unknown) {
    if (err instanceof Error) throw new AppError(err.message);
    throw new AppError('Unknown error');
  }
}

Promise.all-virheet

Promise.all hylätään ensimmäisen hylkäyksen yhteydessä. Ympäröikää kutsu try-catch-rakenteella.
try {
  const [user, posts] = await Promise.all([getUser(id), getPosts(id)]);
} catch (err) { /* one or both failed */ }

Promise.allSettled

allSettled palauttaa sekä onnistumiset että epäonnistumiset ilman poikkeuksen heittämistä.
const results = await Promise.allSettled([getUser(1), getPosts(1)]);
results.forEach(r => {
  if (r.status === 'fulfilled') console.log(r.value);
  else console.error(r.reason);
});

Tyypitetty asynkroninen Result

Yhdistäkää asynkronisuus Result-malliin eksplisiittistä virheenkäsittelyä varten.
async function safeGet<T>(fn: () => Promise<T>): Promise<Result<T>> {
  try { return { ok: true, value: await fn() }; }
  catch (e) { return { ok: false, error: e as Error }; }
}

Käsittelemättömät hylkäykset

Kuunnelkaa Node.js:n käsittelemättömiä hylkäyksiä kaatumisten estämiseksi.
process.on('unhandledRejection', (reason: unknown) => {
  console.error('Unhandled rejection:', reason);
  process.exit(1);
});

Aikakatkaisu Promise.race-toiminnolla

Toteuttakaa tyypitetty aikakatkaisumalli Promise.race-toiminnolla.
function withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {
  const timeout = new Promise<never>((_, reject) =>
    setTimeout(() => reject(new Error('Timeout')), ms));
  return Promise.race([promise, timeout]);
}

Uudelleenyritysmalli

Toteuttakaa tyypitetty asynkroninen uudelleenyritys tyypitetyillä virheillä.
async function retry<T>(fn: () => Promise<T>, times: number): Promise<T> {
  for (let i = 0; i < times; i++) {
    try { return await fn(); } catch (e) { if (i === times - 1) throw e; }
  }
  throw new Error('Unreachable');
}

Samanaikaisten operaatioiden virheenkäsittely

Käsitelkää virheet suoritettaessa asynkronisia operaatioita samanaikaisesti.
const [userResult, postsResult] = await Promise.allSettled([
  getUser(id).then(u => ({ ok: true, value: u })).catch(e => ({ ok: false, error: e })),
  getPosts(id).then(p => ({ ok: true, value: p })).catch(e => ({ ok: false, error: e })),
]);

AsyncQueue-virheiden välittäminen

Asynkronisten iteraattorien virheet välittyvät oikein for-await-rakenteella.
async function* generate() {
  yield await fetchA();
  yield await fetchB(); // error here stops the loop
}
for await (const item of generate()) { process(item); }

Tyypitetty virheväliohjelmisto Next.js:ssä

Käyttäkää tyypitettyjä virherajoja palvelintoiminnoissa.
'use server';
async function createUser(data: CreateUserDto): Promise<Result<User>> {
  return safeGet(() => db.user.create({ data }));
}

Pikatarkistus

Mitä tapahtuu, jos ette käsittele hylättyä Promise-arvoa async/await-funktiossa?

Kertaus

Virheenkäsittely asynkronisessa TypeScript-koodissa: olette oppineet tämän aiheen keskeiset käsitteet ja niiden soveltamisen käytännön TypeScript-projekteissa.
Aloita maksutta

Opi TypeScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
101
Oppitunnit
352

Usein kysytyt kysymykset

Onko oppitunti ”Virheenkäsittely asynkronisessa TypeScript-koodissa” ilmainen?

Kyllä – oppitunnin ”Virheenkäsittely asynkronisessa TypeScript-koodissa” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko TypeScript Academy-kurssin, päivitä CoddyKit PROhon. TypeScript Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Virheenkäsittely asynkronisessa TypeScript-koodissa”?

Hallinnoikaa asynkronisia virheitä tyypitettyjen wrapperien ja utilityjen avulla Harjoittelet TypeScript Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni TypeScript Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin TypeScript Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Virheenkäsittely asynkronisessa TypeScript-koodissa”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä TypeScript Academy-oppitunnilla?

Kyllä. Jokainen TypeScript Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Tyypitetyt virheluokat ja -hierarkiat
  2. Result-malli: Ok ja Err
  3. Kiinniotettujen virheiden kaventaminen (unknown vai Error)
  4. Virheenkäsittely asynkronisessa TypeScript-koodissa
← Takaisin: TypeScript Academy