Promisifisering av asynkron kode i JavaScript

Siden promiser dukket opp i JavaScript ikke så lenge siden, kan noe asynkron funksjonalitet ikke støtte promiser. I dette tilfellet er det nyttig å lage et dekke rundt slik kode i form av et promise, fordi det er mye mer praktisk å bruke promiser. En slik transformasjon kalles promisifisering.

Et eksempel på funksjonalitet som ikke støtter promiser, kan være lasting av bilder, som vi allerede har diskutert i tidligere leksjoner:

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

La oss utføre promisifisering av denne koden, ved å pakke den inn i en funksjon som returnerer et promise:

javascriptfunction 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 bruke funksjonen vår på følgende måte:

javascriptloadImage('img.png').then(function(image) {
  document.body.appendChild(image);
}).catch(function(error) {
  console.log(error);
});
Задание 1

Selvstendig, uten å kikke på koden min, utfør promisifisering av bildelasting. Test den resulterende koden.

Задание 2

La stiene til bildene lagres i en array:

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

Skriv kode som venter til alle bilder er ferdig lastet, og deretter legger dem til i en løkke på slutten av body.

Задание 3

Følgende kode er gitt:

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

Utfør dens promisifisering.