Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro de sintaxe no método .then()

Boa tarde pessoal! Estou recebendo um erro de sintaxe ao tentar executar a promise. Segue meu código:

import chalk from 'chalk';
import * as fs from 'node:fs/promises';

function trataErro(erro) {
    throw new Error(chalk.red(erro.code, 'Não há arquivo no caminho'));
}

function pegaArquivo(caminhoDoArquivo) {
    const encoding = 'utf-8';
    fs.promises
    .readFile(caminhoDoArquivo, encoding);
    .then((texto) => console.log(chalk.green(texto)));
    .catch((erro) => trataErro(erro));
}

pegaArquivo('./arquivos/texto1.md');

E segue o erro que sai no terminal:

file:///C:/Users/Markim/Desktop/Alura/lib-markdown/index.js:12
    .then((texto) => console.log(chalk.green(texto)));
    ^

SyntaxError: Unexpected token '.'
←[90m    at ESMLoader.moduleStrategy (node:internal/modules/esm/translators:139:18)←[39m
←[90m    at ESMLoader.moduleProvider (node:internal/modules/esm/loader:236:14)←[39m
←[90m    at async link (node:internal/modules/esm/module_job:67:21)←[39m

Alguém consegue me explicar o que está acontecendo? Já tentei várias coisas e nada funciona.

3 respostas
solução!

seu then e catch estao fora do escopo, vou deixar um exemplo do codigo identado de forma mais simples pra você entender como deveria, e uma forma mais compacta abaixo como você queria fazer.

function pegaArquivo(caminhoDoArquivo) {
    const encoding = 'utf-8';
    fs.promises.readFile(caminhoDoArquivo, encoding).then((texto) => {
        console.log(chalk.green(texto));
    }).catch((erro) => {
        trataErro(erro);
    });
}

essa seria a forma correta da sua implementação:

function pegaArquivo(caminhoDoArquivo) {
    const encoding = 'utf-8';
    fs.promises.readFile(caminhoDoArquivo, encoding)
    .then((texto) => console.log(chalk.green(texto)))
    .catch((erro) => trataErro(erro));
}

Bom dia Marcos! Funcionou, obrigado pela ajuda! Uma única dúvida residual, o que gerou que o then e catch ficassem fora do escopo foi o fato de ter utilizado ';' no final de cada respectiva linha então?

function pegaArquivo(caminhoDoArquivo) {
    const encoding = 'utf-8';
    fs.promises.readFile(caminhoDoArquivo, encoding)**;** // <--
    .then((texto) => console.log(chalk.green(texto)))**;** // <--
    .catch((erro) => trataErro(erro))**;** // <--
}

Teria sido como se eu tivesse quebrado a função no meio e ela passou a não identificar seus outros parâmetros?

exatamente, foi o ; que quebrou a sintaxe, com o then e o catch ficaram de fora da promisse como se fossem metodos avulsos