Promise-taulukoiden käsittely JavaScriptissä

Nyt käymme läpi kaksi hyödyllistä menetelmää, joiden avulla voidaan työskennellä promise-taulukoiden kanssa. Menetelmä Promise.all mahdollistaa koodin suorittamisen kaikkien taulukkoon välitettyjen promisejen päätyttyä, kun taas menetelmä Promise.race odottaa taulukon ensimmäisen promiseen latautumista, hyläten loput.

Molemmat menetelmät palauttavat tuloksenaan uuden promisen. Menetelmän Promise.all tapauksessa tämän promisen tulos on taulukko, joka sisältää kaikkien välitettyjen promisejen tulokset (tulosten järjestys vastaa promisejen järjestystä taulukossa), kun taas Promise.race palauttaa ensimmäisen valmistuneen promisen tuloksen.

Katsotaanpa käytännössä. Oletetaan, että meillä on promise-taulukko:

javascriptlet promises = [
  new Promise(resolve => setTimeout(() => resolve(1), 1000)),
  new Promise(resolve => setTimeout(() => resolve(2), 2000)),
  new Promise(resolve => setTimeout(() => resolve(3), 3000)),
];

Odottakaamme Promise.all:n avulla kaikkien taulukkomme promisejen latautumisen päättymistä:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // tulostaa [1, 2, 3] - kaikkien promisejen tulokset
});

Ja nyt odotetaan Promise.race:n avulla ensimmäisen promisen latautumisen päättymistä:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // tulostaa 1 - ensimmäisen valmistuneen promisen tulos
});

Jos vähintään yksi taulukon promiseista hylätään, promisen tulos siirtyy välittömästi tilaan rejected. Siksi ilmaantuneen poikkeuksen voi siepata tavallisella, jo opitsellasi tavalla, esimerkiksi catch:in avulla:

javascriptPromise.all(promises).then(function(res) {
  console.log(res);
}).catch(function(err) {
  console.log(err);
});
Задание 1

Tee funktio, joka palauttaa promisen, jonka sisällä on satunnainen viive 1:stä 10:een sekuntiin. Palauttakoon promisen tuloksena tämä viive. Täytä silmukkaa ja funktiotasi käyttäen taulukko 10:llä promisella.

Задание 2

Käytä edellisen tehtävän promise-taulukkoa tehdäksesi niin, että konsoliin tulostuu ensimmäisen toimineen promisen tulos.

Задание 3

Käytä edellisen tehtävän promise-taulukkoa tehdäksesi niin, että konsoliin tulostuu kaikkien promisejen tulosten summa.