Junior
Kam skirta yra Promise.all?
sobes.tech AI
Atsakymas iš AI
Promise.all priima iteruojamą objektą išsipildančių (pvz., masyvą) ir grąžina naują pažadą. Šis naujas pažadas įvykdomas, kai visi perduoti pažadai sėkmingai įvykdomi. Rezultatas bus reikšmių masyvas, atitinkantis kiekvieno perduoto pažado rezultatus, toje pačioje tvarkoje.
Jei bent vienas iš perduotų pažadų bus atmestas, tada Promise.all nedelsiant atmesti su pirmojo atmesto pažado priežastimi.
Taikymas:
- Vienu metu vykdyti kelias asinchronines operacijas, kurios nepriklauso viena nuo kitos.
- Laukti, kol baigsis operacijų rinkinys, prieš pereinant prie kito žingsnio.
Pavyzdys:
async function fetchData() {
const urls = [
'https://api.example.com/data1',
'https://api.example.com/data2',
'https://api.example.com/data3',
];
try {
// Duomenų įkėlimas iš kelių URL vienu metu
const responses = await Promise.all(urls.map(url => fetch(url)));
// Patikrinimas, ar kiekvienas atsakymas sėkmingas
for (const response of responses) {
if (!response.ok) {
// Jei vienas atsakymas nesėkmingas, mesti klaidą
throw new Error(`HTTP klaida! statusas: ${response.status}`);
}
}
// Visų atsakymų analizė į JSON
const jsonData = await Promise.all(responses.map(response => response.json()));
// Dabar jsonData yra masyvas su visų užklausų rezultatais
console.log(jsonData);
} catch (error) {
// Klaidos tvarkymas, jei viena iš pažadų buvo atmesta (Fetch arba JSON.parse)
console.error('Klaida įkeliant duomenis:', error);
}
}
fetchData();