Projekt: Weather App
Leden 2026
Po projektu ToDo List, kde jsem data ukládal jen k sobě do prohlížeče, přišel skok do reálného světa – API. Úkolem bylo vytvořit aplikaci na předpověď počasí, která si tahá živá data z externího serveru (Visual Crossing).
Hlavním cílem nebylo ani tak počasí samotné, jako spíš pochopení toho, jak JavaScript komunikuje se světem a jak funguje asynchronní kód.
Sbohem .then(), vítej async/await
Největší “aha moment” tohoto týdne byl přechod od Promises (Slibů) k moderní syntaxi.
Začal jsem s klasickým řetězením .then(), což sice fungovalo, ale kód byl plný závorek a špatně se četl. Pak jsem objevil async a await. Je to jen “syntaktický cukr”, ale kód najednou vypadá čistě a čte se shora dolů, i když na pozadí čeká na odpověď serveru.
Takhle vypadá srdce mé aplikace:
const getWeather = async () => {
try {
const response = await fetch(url);
// Fetch nehodí chybu při 404, musíme to hlídat ručně
if (!response.ok) {
throw new Error(`Chyba načítání: ${response.status}`);
}
const data = await response.json();
// Úprava DOMu až ve chvíli, kdy máme data
weatherContent.textContent = `V městě ${data.address} je právě ${data.currentConditions.temp}°C`;
} catch (error) {
// Záchranná síť pro výpadky netu nebo špatné klíče
console.error(error);
}
};
Co mě potrápilo
- API Klíče a bezpečnost: První lekce bezpečnosti. Dozvěděl jsem se, že API klíče nepatří do veřejného repozitáře na GitHubu. Vyřešil jsem to přesunem klíče do
config.js, který jsem přidal do.gitignore, a importuji ho jako ES modul. - Chybové stavy: Zjistil jsem, že když server nenajde město (chyba 404),
fetchto nepovažuje za chybu. Musel jsem se naučit ručně vyhazovatthrow new Error, aby se spustilcatchblok. - CSS a design: Chtěl jsem, aby aplikace vypadala moderně, tak jsem zvolil tmavý režim s neonovým tlačítkem a dynamickou změnou obrázků podle toho, jestli mrzne nebo je teplo.
GitHub: projekt weather app