⊗jsSpPrmPf 172 of 294 menu

Promisifikacija asinhrone kode v JavaScript

Ker so promise v JavaScriptu pojavile relativno nedavno, nekateri asinhroni funkcionali morda ne podpirajo promise. V tem primeru je koristno ustvariti ovoj okoli takšne kode v obliki promise, saj je uporaba promise veliko bolj priročna. Taka preobrazba se imenuje promisifikacija.

Primer funkcionala, ki ne podpira promise, je lahko nalaganje slik, ki smo ga že obravnavali v prejšnjih lekcijah:

let image = document.createElement('img'); image.src = 'img.png'; image.addEventListener('load', function() { document.body.appendChild(image); }); image.addEventListener('error', function() { console.log('napaka pri nalaganju slike'); });

Izvedimo promisifikacijo te kode, tako da jo ovijemo v funkcijo, ki vrne promise:

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('napaka pri nalaganju slike "' + path + '"')); }); }); }

Našo funkcijo lahko uporabimo na naslednji način:

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

Samostojno, brez gledanja v mojo kodo, izvedite promisifikacijo nalaganja slik. Preizkusite dobljeno kodo.

Naj bodo poti do slik shranjene v polju:

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

Napišite kodo, ki bo počakala na konček nalaganja vseh slik, nato pa jih v zanki doda na konec body-ja.

Podana je naslednja koda:

window.addEventListener('DOMContentLoaded', function() { console.log('dom naložen'); });

Izvedite njeno promisifikacijo.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni