main.js — asinchroninis įkėlimas
Dabar panaudokim api.js. Kodo stulpelyje — atnaujintas main.js: 1 pamokos vietaženklis virsta tikru asinchroniniu įkėlimu. Parodom „Loading…", laukiam tinklo, tada — rezultatą arba klaidą.
Trys būsenos jau čia, nors dar primityvios:
- Kraunama:
app.textContent = 'Loading…'priešawait. - Pavyko: parodom, kiek nuotraukų gavom ir naujausios pavadinimą.
- Klaida:
try/catchpagauna ir tinklo lūžį, ir mūsųthrowdėl!response.ok.
async function load() {
app.textContent = 'Loading space pictures…';
try {
const pictures = await fetchPictures(14);
app.textContent = `Loaded ${pictures.length} pictures. Newest: ${pictures[0].title}`;
} catch (error) {
app.textContent = `Could not load: ${error.message}`;
}
}
load();
Patikrink. Serviruok (python -m http.server) ir atidaryk. Turi pamatyti:
Trumpai: Loading space pictures…
Tada: Loaded 14 pictures. Newest: <šiandienos APOD pavadinimas>
Spąstai (DEMO_KEY riba). Kelis kartus greitai perkrauk puslapį. Anksčiau ar vėliau vietoj nuotraukų pamatysi:
Could not load: The API returned 429
429 Too Many Requests—DEMO_KEYkvota (~30/val.) išnaudota. (NASA kartais grąžina ir403su „rate limit" tekstu.) Tai ne tavo kodo klaida — tai bendro rakto riba. Sprendimas — savas raktas (namų darbe). O 6 pamokoje šią klaidą paversim aiškia žinute su „Retry" mygtuku, ne šiurkščiu „429".