⊗jsSpPrmPf 172 of 294 menu

Promisifikacija asinhronog koda u JavaScript-u

Pošto su promisi u JavaScript-u pojavili ne tako davno, neke asinhrone funkcije mogu ne podržavati promise. U ovom slučaju korisno je kreirati omotač oko takvog koda u vidu promisa, jer je korišćenje promisa mnogo praktičnije. Takva transformacija se naziva promisifikacija.

Primer funkcionalnosti koji ne podržava promise može biti učitavanje slika, koje smo već razmatrali u prethodnim lekcijama:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { document.body.appendChild(image); }); image.addEventListener('error', function() { console.log('Greška pri učitavanju slike'); });

Hajde da izvršimo promisifikaciju ovog koda, obavivši ga funkcijom koja vraća promis:

function loadImage(path) { return new Promise(function(resolve, reject) { let image = document.createElement('img'); image.src = path; image.addEventListener('load', function() { resolve(image); }); image.addEventListener('error', function() { reject(new Error('Greška pri učitavanju slike "' + path + '"')); }); }); }

Moći ćemo da upotrebimo našu funkciju na sledeći način:

loadImage('img.png').then(function(image) { document.body.appendChild(image); }).catch(function(error) { console.log(error); });

Samostalno, ne gledajući u moj kod, izvršite promisifikaciju učitavanja slika. Testirajte dobijeni kod.

Neka se putanje do slika čuvaju u nizu:

let paths = ['img1.png', 'img2.png', 'img3.png'];

Napišite kod koji će sačekati da se završi učitavanje svih slika, a zatim ih u ciklusu dodati na kraj body-ja.

Dat je sledeći kod:

window.addEventListener('DOMContentLoaded', function() { console.log('dom je učitan'); });

Izvršite njegovu promisifikaciju.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij