⊗jsSpPrmPf 172 of 294 menu

Промісіфікацыя асінхроннага кода ў JavaScript

Так як промісы з'явіліся ў JavaScript не так даўно, то некаторы асінхронны функцыянал можа не падтрымліваць промісы. У гэтым выпадку карысна стварыць над такім кодам абалонку ў выглядзе проміса, так як карыстацца промісамі значна зручней. Такое пераўтварэнне называецца промісіфікацыяй.

Прыкладам функцыяналу, які не падтрымлівае промісы, можа служыць загрузка выяў, якую мы ўжо разбіралі ў папярэдніх уроках:

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'); });

Давайце выканаем промісіфікацыю гэтага кода, абарваўшы яго ў функцыю, якая вяртае проміс:

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')); }); }); }

Мы зможам скарыстацца нашай функцыяй наступным чынам:

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

Самастойна, не падглядаючы ў мой код, выканайце промісіфікацыю загрузкі выяў. Пратэстуйце атрыманы код.

Хай шляхі да выяў захоўваюцца ў масіве:

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

Напішыце код, які дачакаецца заканчэння загрузкі ўсіх выяў, а затым дадасць іх у цыкле ў канец body.

Дадзены наступны код:

window.addEventListener('DOMContentLoaded', function() { console.log('dom загружаны'); });

Выканайце яго промісіфікацыю.

Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικά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
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць