ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΠΊΠΎΠ΄: Promise ΠΈ await
ΠΠΎΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΠ° Π½Π΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΡ ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ·ΠΆΠ΅.
ΡΠ°ΠΊΠΆΠ΅ Π² ΠΎΡΠ½ΠΎΠ²Π°Ρ Π²Π΅Π±-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΠ° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ΅ΡΠΈ, ΠΎΡΠ²Π΅Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π½Π΅ ΡΡΠ°Π·Ρ. ΠΡΠ»ΠΈ Π±Ρ Π±ΡΠ°ΡΠ·Π΅Ρ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π» Π²ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎ ΠΎΡΠ²Π΅ΡΠ°, ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΈ ΠΏΡΠΎΠΊΡΡΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π»ΠΈ Π±Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΠΎΡΡΠΎΠΌΡ JavaScript ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠ·ΠΆΠ΅.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅
Promise β ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π±ΡΠ΄ΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ»ΠΈ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ setTimeout Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΠ»ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π° Promise ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»ΠΎΡΡ:
function wait(milliseconds) {
return new Promise((resolve) => {
setTimeout(resolve, milliseconds);
});
}
async function showResult() {
console.log("ΠΠ°ΡΠ°Π»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅");
await wait(500);
console.log("ΠΠΎΠ»ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΡΠΎΡΠ»ΠΈ");
}
showResult();
console.log("ΠΡΠ° ΡΡΡΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ ΡΠ°Π½ΡΡΠ΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ");Π‘Π½Π°ΡΠ°Π»Π° ΠΏΠΎΡΠ²ΠΈΡΡΡ Β«ΠΠ°ΡΠ°Π»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅Β», Π·Π°ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎ ΡΡΡΠΎΠΊΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΌ β Β«ΠΠΎΠ»ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΏΡΠΎΡΠ»ΠΈΒ». await ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² showResult, Π½ΠΎ Π½Π΅ Π²ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ. Π‘Π»ΠΎΠ²ΠΎ async ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π½ΡΡΡΠΈ Π½Π΅Π΅ await. Π’Π°ΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΌΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Promise.
ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ
Π‘Π΅ΡΠ΅Π²ΠΎΠΉ Π·Π°ΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡΡ. ΠΠ»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ try ΠΈ catch:
async function loadProducts() {
try {
const response = await fetch("/api/products");
if (!response.ok) {
throw new Error("Π‘Π΅ΡΠ²Π΅Ρ Π²Π΅ΡΠ½ΡΠ» ΠΎΡΠΈΠ±ΠΊΡ");
}
const products = await response.json();
console.log(products);
} catch (error) {
console.error("ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠΎΠ²Π°ΡΡ", error);
}
}fetch ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Promise Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ. response.json() ΡΠΎΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Promise: ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π»Π° ΠΎΡΠ²Π΅ΡΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ. ΠΠ΄ΡΠ΅Ρ /api/products Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅Ρ: ΡΡΠΎΠ±Ρ ΠΊΠΎΠ΄ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π» Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π½ΡΠΆΠ΅Π½ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠΎ ΡΡΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ. ΠΡΠΎΠ²Π΅ΡΠΊΠ° response.ok Π½ΡΠΆΠ½Π° ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ HTTP-ΠΎΡΠ²Π΅Ρ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π² catch.
Π Next-03 Π²Ρ Π²ΡΡΡΠ΅ΡΠΈΡΠ΅ async Ρ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΠΌΡ. Π’Π°ΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅, Π° ΠΈΠ΄Π΅Ρ ΡΠ° ΠΆΠ΅: ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅. ΠΠ»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ MDN ΠΏΠΎ ΠΏΡΠΎΠΌΠΈΡΠ°ΠΌ ΠΈ ΡΠ°Π·Π΄Π΅Π» ΠΏΡΠΎ async ΠΈ await.