Werk met beloftes-versamelings in JavaScript

Nou sal ons twee nuttige metodes ontleed, wat werk met versamelings van beloftes moontlik maak. Die metode Promise.all laat toe om kode uit te voer nadat al die beloftes wat aan dit as 'n versameling oorgedra is, voltooi is, terwyl die metode Promise.race wag vir die voltooiing van die eerste belofte in die versameling, en die res verwerp.

Albei metodes gee 'n nuwe belofte as hul resultaat terug. Vir die metode Promise.all sal die resultaat van hierdie belofte 'n versameling wees van die resultate van al die oorgedrawe beloftes (die volgorde van die resultate kom ooreen met die volgorde van die beloftes in die versameling), en vir Promise.race - die resultaat van die eerste belofte wat voltooi is.

Kom ons kyk in die praktyk. Gestel ons het 'n versameling beloftes:

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

Kom ons gebruik Promise.all om te wag totdat al die beloftes in ons versameling voltooi is:

javascriptPromise.all(promises).then(function(res) {
  console.log(res); // sal [1, 2, 3] uitvoer - die resultate van al die beloftes
});

En nou, deur Promise.race te gebruik, wag ons vir die voltooiing van die eerste belofte:

javascriptPromise.race(promises).then(function(res) {
  console.log(res); // sal 1 uitvoer - die resultaat van die eerste voltooide belofte
});

As ten minste een van die beloftes in die versameling verwerp word, sal die belofte met die resultaat onmiddellik na die toestand rejected oorgaan. Daarom kan die ontstane uitsondering gevang word op die gewone, reeds deur julle bestudeerde manier, byvoorbeeld deur catch:

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

Maak 'n funksie wat 'n belofte teruggee, binne-in waarvan 'n ewekansige vertraging van 1 tot 10 sekondes gestel is. Laat die belofte hierdie vertraging as sy resultaat teruggee. Deur 'n lus en jou funksie te gebruik, vul 'n versameling met 10 beloftes.

Задание 2

Deur die versameling beloftes uit die vorige taak te gebruik, maak so dat die resultaat van die eerste voltooide belofte in die konsole uitvoer.

Задание 3

Deur die versameling beloftes uit die vorige taak te gebruik, maak so dat die som van die resultate van al die beloftes in die konsole uitvoer.