Asinhronā koda promisifikācija JavaScript

Tā kā promise JavaScript parādījās nesen, dažas asinhronās funkcijas var neatbalstīt promise. Šajā gadījumā ir noderīgi izveidot ap šādu kodu apvalku promise formā, jo lietot promise ir daudz ērtāk. Šādu pārveidi sauk par promisifikāciju.

Funkcionalitātes piemērs, kas neatbalsta promise, varētu būt attēlu ielāde, ko mēs jau apskatījām iepriekšējās nodarbībās:

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

Veiksim šī koda promisifikāciju, aptinot to funkcijā, kas atgriež 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'));
    });
  });
}

Mēs varēsim izmantot mūsu funkciju šādi:

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

Patstāvīgi, neieskatoties manā kodā, veiciet attēlu ielādes promisifikāciju. Testējiet iegūto kodu.

Задание 2

Lai attēlu ceļi glabājas masīvā:

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

Uzrakstiet kodu, kas gaidīs visu attēlu ielādes pabeigšanu un pēc tam pievienos tos ciklā body beigās.

Задание 3

Dots šāds kods:

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

Veiciet tā promisifikāciju.