Sobes.tech
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.