⊗jsSpPrmPf 172 of 294 menu

Promisificering af asynkron kode i JavaScript

Da promises ikke har været i JavaScript så længe, kan visse asynkrone funktioner ikke understøtte promises. I dette tilfælde er det nyttigt at skabe en wrapper omkring sådan kode i form af et promise, da det er meget mere bekvemt at bruge promises. Sådan en transformation kaldes promisificering.

Et eksempel på en funktion, der ikke understøtter promises, kan være indlæsning af billeder, som vi allerede har gennemgået i tidligere lektioner:

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

Lad os udføre promisificering af denne kode ved at indpakke den i en funktion, der returnerer et 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')); }); }); }

Vi vil kunne bruge vores funktion på følgende måde:

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

Udfør selv, uden at kigge på min kode, promisificering af billedindlæsning. Test den resulterende kode.

Antag at stierne til billederne er gemt i et array:

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

Skriv kode, der venter på indlæsningen af alle billeder er afsluttet, og derefter tilføjer dem i en løkke til slutningen af body.

Følgende kode er givet:

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

Udfør dens promisificering.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis