Middle+
Защо при реализирането на promiseAll трябва да разчитаме на брояча count, а не просто да проверяваме дължината на масива с резултати?
sobes.tech AI
Отговор от AI
При реализиране на Promise.all не може просто да се проверява дължината на масива с резултатите, защото промисите могат да завършат във всякакъв ред, а някои от тях могат да се провалят по-рано от останалите.
Броячът count се увеличава само когато промисът успешно завърши, което позволява точно да се следи колко промиса вече са изпълнени. Ако проверявахме само дължината на масива с резултатите, можехме погрешно да предположим, че всички промиси са завършили, дори ако някои все още са в процес или е възникнала грешка.
Пример:
function promiseAll(promises) {
return new Promise((resolve, reject) => {
const results = [];
let count = 0;
promises.forEach((p, i) => {
Promise.resolve(p)
.then(value => {
results[i] = value;
count++;
if (count === promises.length) {
resolve(results);
}
})
.catch(err => reject(err));
});
});
}
Тук, броячът гарантира, че ще изчакаме завършването на всички промиси, а не само наличието на елементи в масива results.