2
respostas

Dúvida: erro não aparece, qual o caminho do código quando retira-se

cli.js:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

index.js:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Eu retirei propositalmente o "await" antes de fs.promises.readFile(texto, 'utf-8');, o que fez com que a variável "conteudo" recebesse uma promessa pendente, continuando o código chega em const resultado = contaPalavras(conteudo);, lá na função "contaPalavras" temos essa linha: const paragrafos = extraiParagrafos(texto);, que faz com que entre na função "extraiParagrafos" que tem essa linha: return texto.toLowerCase().split('\n');, eu pensei que daria um erro no console mas não. Continuando na função "contaPalavras" coloquei um "console.log" depois daquela linha que chamava "extraiParagrafos", mas não imprimiu nada no console então eu acho que a função não continua executando. Mas não sei o pq de não dar erro. E depois dessa função não sei se volta lá para a função "processaArquivo" e se volta não sei o valor da variável "resultado" e como se prossegue.

Terminal:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas

Olá, Luídi.

O comportamento descrito no seu código está relacionado ao uso incorreto de promessas pendentes no JavaScript, especialmente quando você remove o await na leitura do arquivo.

O problema ocorre porque:

  • O método fs.promises.readFile retorna uma Promise.
  • Ao remover o await, a variável conteudo recebe a promessa pendente em vez do valor resolvido.
  • Quando você passa conteudo para a função contaPalavras, ela não consegue processar corretamente, pois ainda não recebeu o valor.

Como evitar esse comportamento:

  • Promises precisam ser resolvidas antes de serem utilizadas. Remover o await faz com que o código continue a execução sem esperar a conclusão da operação assíncrona.
  • A linha const resultado = contaPalavras(conteudo) está tentando processar uma promessa e não o conteúdo em si, o que interrompe a execução.

Para identificar esses erros:

  • Adicione validações para verificar se a variável é uma promessa antes de usá-la.
  • Utilize console.log logo após o readFile para conferir o estado da variável.
  • Sempre trate erros com try/catch, especialmente ao trabalhar com operações assíncronas.

Esse problema é uma questão clássica de operações assíncronas em JavaScript e o uso correto do await e async é essencial para o comportamento esperado.

Espero que essas explicações ajudem a entender o fluxo e a corrigir o problema no seu código.

Mas por que não ocorre um erro no terminal? Não deveria ocorrer um erro quando a promessa pendente chegasse na função "extraiParagrafos" e executasse essa linha: return texto.toLowerCase().split('\n');? E por que depois de fazer essa chamada dessa função dentro da função "contaPalavras", ela não executa mais?