Soubor ze serveru
Teď si o data řekněte serveru. Funkce fetch() požádá o soubor na adrese, kterou jí dáte. Adresa funguje stejně jako v <script src="script.js">: "recepty.json" znamená soubor recepty.json vedle stránky.
Odpověď nepřijde hned, protože požadavek musí dorazit na server a zpátky. Proto fetch() vrací Promise, tedy hodnotu, která přijde později, jak ji znáte z minulé lekce, a počkáte na ni pomocí await:
async function nactiZvirata() {
const odpoved = await fetch("zvirata.json");
const zvirata = await odpoved.json();
console.log(zvirata[0].jmeno);
}
nactiZvirata();
console.log("Ptám se serveru…");Ptám se serveru…
RexZískání dat má dva kroky:
await fetch("zvirata.json")počká na odpověď serveru (anglicky response). Ta říká, jak požadavek dopadl, a nese obsah souboru.await odpoved.json()obsah přečte a převede ho z JSON na pole a objekty, stejně jakoJSON.parse(). I čtení chvíli trvá, a tak potřebuje vlastníawait.
Oba řádky s await musí být ve funkci označené async. A všimněte si pořadí výpisů: nactiZvirata() pošle požadavek, a zatímco čeká na odpověď, zbytek skriptu běží dál. Data přijdou až později.
Proto je častou chybou použít data mimo funkci:
let zvirata = [];
async function nactiZvirata() {
const odpoved = await fetch("zvirata.json");
zvirata = await odpoved.json();
}
nactiZvirata();
console.log(zvirata.length);0Když se spustí console.log(), server ještě neodpověděl, a tak je zvirata pořád prázdné pole. Všechno, co data potřebuje, patří do funkce pod oba řádky s await, nebo do funkce, kterou odtud zavoláte.
Jak psát:
Pokyny
Napište async funkci nactiRecepty(), která pomocí fetch() načte recepty.json, odpověď přečte pomocí await odpoved.json() a pro každý recept vloží do seznamReceptu prvek li s textem jako Palačinky (20 min). Funkci zavolejte na konci skriptu.
Nad seznamem ukažte, kolik receptů je: Počet receptů: 4 v prvku pocetText. Počet spočítejte z délky pole a ten řádek dejte do funkce nactiRecepty() pod await odpoved.json(), kde už data jsou.