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:
let 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:
Promise.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:
Promise.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:
Promise.all(promises).then(function(res) {
console.log(res);
}).catch(function(err) {
console.log(err);
});
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.
Deur die versameling beloftes uit die vorige taak te gebruik, maak so dat die resultaat van die eerste voltooide belofte in die konsole uitvoer.
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.