Sobes.tech
Junior

Que tipos de Promise conheces?

sobes.tech IA

Resposta da IA

Principais tipos de promessas no Node.js:

  • Promise Básico: É um contêiner para valores futuros ou erros. Tem três estados: pending (pendente), fulfilled (cumprido), rejected (rejeitado). É criado com o construtor new Promise().

    // Criando uma promessa básica
    const myPromise = new Promise((resolve, reject) => {
      // Operação assíncrona
      setTimeout(() => {
        const success = true;
        if (success) {
          resolve("Operação concluída com sucesso");
        } else {
          reject("Ocorreu um erro");
        }
      }, 1000);
    });
    
  • Promise.resolve(): Cria uma promessa que passa imediatamente para o estado fulfilled com um valor dado.

    // Criando uma promessa resolvida
    const resolvedPromise = Promise.resolve("Esta já é uma promessa resolvida");
    
  • Promise.reject(): Cria uma promessa que passa imediatamente para o estado rejected com uma razão de erro dada.

    // Criando uma promessa rejeitada
    const rejectedPromise = Promise.reject(new Error("Esta é uma promessa rejeitada"));
    
  • Promise.all(): Toma um array de promessas e retorna uma nova promessa. Ela passa ao estado fulfilled quando todas as promessas do array são concluídas com sucesso. O valor será um array de resultados na mesma ordem das promessas de entrada. Se qualquer das promessas for rejeitada, Promise.all() é rejeitada imediatamente com a razão da primeira promessa rejeitada.

    // Uso de Promise.all()
    const promise1 = Promise.resolve(1);
    const promise2 = Promise.resolve(2);
    const promise3 = new Promise((resolve, reject) => setTimeout(() => resolve(3), 100));
    Promise.all([promise1, promise2, promise3])
      .then((values) => {
        // values será [1, 2, 3]
      })
      .catch((error) => {
        // Tratamento de erros
      });
    
  • Promise.allSettled(): Toma um array de promessas e retorna uma nova promessa. Ela passa ao estado fulfilled quando todas as promessas do array são concluídas, com sucesso (fulfilled) ou rejeitadas (rejected). O valor será um array de objetos descrevendo o resultado de cada promessa (estado e valor/razão). Diferente do Promise.all(), ela não rejeita imediatamente.

    // Uso de Promise.allSettled()
    const promiseA = Promise.resolve("sucesso");
    const promiseB = Promise.reject("erro");
    Promise.allSettled([promiseA, promiseB])
      .then((results) => {
        // results será um array de objetos:
        // [{status: 'fulfilled', value: 'sucesso'}, {status: 'rejected', reason: 'erro'}]
      });
    
  • Promise.race(): Toma um array de promessas e retorna uma nova promessa. A nova promessa passa ao estado fulfilled ou rejected com o resultado/razão da primeira promessa do array que se resolve ou rejeita.

    // Uso de Promise.race()
    const promiseFast = new Promise((resolve, reject) => setTimeout(() => resolve("Eu sou rápido!"), 50));
    const promiseSlow = new Promise((resolve, reject) => setTimeout(() => resolve("Eu sou lento..."), 500));
    Promise.race([promiseFast, promiseSlow])
      .then((value) => {
        // value será "Eu sou rápido!"
      });
    
  • Promise.any(): Toma um array de promessas e retorna uma nova promessa. A promessa passa ao estado fulfilled com o valor da primeira promessa que se resolve com sucesso. Se todas as promessas forem rejeitadas, Promise.any() retorna um erro AggregateError contendo as razões de todas as promessas rejeitadas. Disponível a partir do Node.js 12.

    // Uso de Promise.any()
    const promiseFail1 = Promise.reject("Erro 1");
    const promiseSuccess = Promise.resolve("Sucesso!");
    const promiseFail2 = Promise.reject("Erro 2");
    Promise.any([promiseFail1, promiseSuccess, promiseFail2])
      .then((value) => {
        // value será "Sucesso!"
      })
      .catch((error) => {
        // Tratamento de AggregateError se todas as promessas forem rejeitadas
      });