Tema
/
Interneto svetainių kliento dalies kūrimas JS
📖 Teorija

Keturios užklausos baigtys

4–5 pamokose galerija veikė — kai viskas gerai. Bet tinklas realybėje klysta, ir kiekviena užklausa turi ne vieną, o keturias baigtis:

  • Kraunama (loading) — išsiuntėm, laukiam.
  • Įkelta (loaded) — turim duomenų, rodom.
  • Tuščia (empty) — gavom atsakymą, bet jame nieko (arba paieška nieko nerado).
  • Klaida (error) — tinklas ar API nepavyko.

„Tuščia" ir „klaida" dažniausiai pamirštami — ir būtent jie skiria „atrodo sulūžę" nuo „viskas tvarkoje".

Tipizuotos klaidos. throw new Error('kažkas lūžo') bėda — kviečiantysis nebeatskiria, kas nutiko: ar tinklo lūžis, ar ribota kvota (429), ar 404. O reaguoti reikia skirtingai: į kvotą — „palauk / gauk savo raktą", į tinklą — „bandyk vėl". Todėl darysim klaidų klases: NetworkError, RateLimitError, NotFoundError, ApiError — kiekviena su retryable požymiu, kad UI žinotų, ar siūlyti „Retry".

Ir svarbiausias duomenų atvejis — media_type. APOD kiekvieną dieną grąžina arba nuotrauką, arba vaizdo įrašą (media_type: 'image' | 'video'). Kai kurios dienos — vaizdo įrašai (dažnai YouTube). Jei aklai įdėsi pic.url į <img>, vaizdo įrašo nuorodą — gausi sulūžusią nuotrauką. Reikia patikrinti media_type ir šakoti.

(Pažymėsiu į priekį: 16 pamokoje TypeScript šį media_type patikrinimą padarys privalomą — pamiršti jo tiesiog nebus įmanoma. Bet kol kas — patikrinam patys.)