Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jsSpPrmPf 172 of 294 menu
◀ ▶

Asynkronisen koodin promisifiointi JavaScriptissä

Koska promiset eivät ole olleet JavaScriptissä kovin kauan, jotkut asynkroniset toiminnot eivät välttämättä tue promiseja. Tällöin on hyödyllistä luoda kyseiselle koodille promise-kääre, sillä promiseilla on paljon mukavampaa käyttää. Tällaista muunnosta kutsutaan promisifioinniksi.

Esimerkkinä toiminnosta, joka ei tue promiseja, voi olla kuvien lataus, jota olemme jo käsitelleet aikaisemmissa oppitunneissa:

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

Suoritetaan tämän koodin promisifiointi käärimällä se funktioon, joka palauttaa promisen:

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('kuvan "' + path + '" latausvirhe')); }); }); }

Voimme käyttää funktiotamme seuraavalla tavalla:

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

Suorita itsenäisesti, katsomatta koodiini, kuvien latauksen promisifiointi. Testaa saatua koodia.

Oletetaan, että kuvien polut tallennetaan taulukkoon:

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

Kirjoita koodi, joka odottaa kaikkien kuvien latautumisen loppumista ja sitten lisää ne silmukassa bodyn loppuun.

Annettu seuraava koodi:

window.addEventListener('DOMContentLoaded', function() { console.log('dom ladattu'); });

Suorita sen promisifiointi.

← →
↑
Suomi▼
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää