Middle+
Por que na implementação do promiseAll é necessário confiar na contagem count em vez de simplesmente verificar o comprimento do array de resultados?
sobes.tech IA
Resposta da IA
Na implementação do Promise.all, não se pode simplesmente verificar o comprimento do array de resultados, porque as promessas podem ser concluídas em qualquer ordem, e algumas podem terminar com erro antes das outras.
O contador count só aumenta quando a promessa é concluída com sucesso, o que permite rastrear exatamente quantas promessas já foram resolvidas. Se apenas verificássemos o comprimento do array de resultados, poderíamos contar erroneamente que todas as promessas terminaram, mesmo que algumas ainda estejam em andamento ou tenha ocorrido um erro.
Exemplo:
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));
});
});
}
Aqui, o count garante que vamos aguardar a conclusão de todas as promessas, e não apenas a existência de elementos no array results.