⊗jsSpPrmPf 172 of 294 menu

Promisifikace asynchronního kódu v JavaScriptu

Protože promise se v JavaScriptu objevily nedávno, některé asynchronní funkce mohou promise nepodporovat. V tomto případě je užitečné vytvořit nad takovým kódem obal ve formě promise, protože používání promise je mnohem pohodlnější. Taková transformace se nazývá promisifikace.

Příkladem funkce, která nepodporuje promise, může být načítání obrázků, které jsme již rozebírali v předchozích lekcích:

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

Proveďme promisifikaci tohoto kódu, obálkou jej do funkce, která vrací 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('image "' + path + '" load error')); }); }); }

Naši funkci budeme moci použít následujícím způsobem:

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

Samostatně, bez nahlížení do mého kódu, proveďte promisifikaci načítání obrázků. Otestujte získaný kód.

Nechť cesty k obrázkům jsou uloženy v poli:

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

Napište kód, který počká na dokončení načtení všech obrázků, a poté je v cyklu přidá na konec body.

Je dán následující kód:

window.addEventListener('DOMContentLoaded', function() { console.log('dom załadowany'); });

Proveďte jeho promisifikaci.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout