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

[Dúvida] Função processaTexto/pegaArquivo async e await

Olá, seguindo a sequência da aula no tempo 10:20 tenta-se executar o código e o retorno é uma 'promise'.. ok, a função estava sem async/await, só que no meu código eu executo e a função retorna os valores corretamente, não consegui sacar o motivo disso... no caso o código é:

async function processaTexto(args){
    const path = args[2]
    if(fs.lstatSync(path).isFile()){
        const result = await pegaArquivo(path)
        console.log(chalk.blue('Lista de Links'), result)
    } else if (fs.lstatSync(path).isDirectory()) {
        const files = await fs.promises.readdir(path)
        files.forEach((fileName) => {
            const lista = pegaArquivo(`${path}/${fileName}`)
            console.log(chalk.yellow(`${path}/${fileName}`))
        })
        console.log(files)
    }
}

Sendo mais específico na parte

 files.forEach((fileName) => {
            const lista = pegaArquivo(`${path}/${fileName}`)

Quando a Professora Juliana recebe 2 promises de retorno ela altera o código para,

 files.forEach( async (fileName) => {
            const lista = await pegaArquivo(`${path}/${fileName}`)

mas no meu código eu executei antes de alterar (assim como está no primeiro bloco de código) e recebi o resultado corretamente.

Link github https://github.com/rnfrafael/2708-node-lib-md

O que houve no código que deu certo? Fico pensando que a função pegaArquivo é uma função async então já resolve, mas o que não entendo é porque no código da aula houve necessidade de esperar/await na chamada da função.

2 respostas

Atualização sobre o 'caso'. Dando sequência na aula é feita uma função para imprimir no console, ao usar a função agora mostra 'Promise Pending', mas mesmo assim ainda mostra o resultado. Antes não mostrava que era uma promessa pendente e após a função está mostrando. E o mais interessante é que voltei pro código 'antigo', antes da função, e agora mostra Promise pending, mas continua dando resultado também.

Gitbash mostrando que a lista links como promise pending e mostrando resultado ao mesmo tempo

solução!

Como sempre tudo em programação é algo 'simples', reassistindo a aula percebi que não removi o console.log da função 'pegaArquivo' e ela que estava dando o resultado, eu li várias vezes e meu cérebro ignorou :), agora deu tudo certo e faz sentido.