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

Erro pelo await

C:\Users\Pedro\Desktop\aluranodesql\models\atendimentos.js:69 const { data } = await axios.get(http://localhost:8082/${cpf}) ^^^^^

SyntaxError: await is only valid in async function at wrapSafe (internal/modules/cjs/loader.js:1053:16) at Module.compile (internal/modules/cjs/loader.js:1101:27) at Object.Module.extensions..js (internal/modules/cjs/loader.js:1157:10) at Module.load (internal/modules/cjs/loader.js:985:32) at Function.Module.load (internal/modules/cjs/loader.js:878:14) at Module.require (internal/modules/cjs/loader.js:1025:19) at require (internal/modules/cjs/helpers.js:72:18) at Object. (C:\Users\Pedro\Desktop\aluranodesql\infraestrutura\tabelas.js:1:22) at Module.compile (internal/modules/cjs/loader.js:1137:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10) [nodemon] app crashed - waiting for file changes before starting...

BuscaPorId(id, res){
        const sql = `SELECT * FROM atendimentos WHERE id=${id}`
        conexao.query(sql, (erro,resultados) =>{
            const atendimento = resultados[0]
            const cpf = atendimento.cliente
            if(erro){
                res.status(400).json(erro)
            }
            else{
                const { data } = await axios.get(`http://localhost:8082/${cpf}`)

                atendimento.cliente = data

                res.status(200).json(atendimento)
            }
        })
    }

aparece esse erro do await ou um erro que fala do axios

3 respostas

Olá, Gabriel!

Este erro foi lançado pois a palavra chave await precisa ficar dentro de uma "async function" - função assíncrona. Em seu código faltou apenas incluir esta palavra chave antes do nome do método BuscaPorId:

async BuscaPorId(id, res){
        const sql = `SELECT * FROM atendimentos WHERE id=${id}`
        conexao.query(sql, (erro,resultados) =>{
            const atendimento = resultados[0]
            const cpf = atendimento.cliente
            if(erro){
                res.status(400).json(erro)
            }
            else{
                const { data } = await axios.get(`http://localhost:8082/${cpf}`)

                atendimento.cliente = data

                res.status(200).json(atendimento)
            }
        })
    }

E assim vc estará usando o recurso async/await para lhe dar com métodos que retornam Promises. Como fazem os métodos do Axios. Você pode ver esse exemplo da documentação do Axios, e note como é mais simples usando async/await.

Olá, Italo

Adicionei o async, porém ainda continua com o mesmo erro, fala que funciona apenas função async, fechei e abri o app, porém continua com o mesmo erro.

solução!

Você pode conferir aqui que a própria callback function que é passada como segundo parâmetro pelo conexao.query(), foi transformado para async function no projeto da aula.

    conexao.query(sql, async (erro, resultados) => { 
        //dentro desta função contém o 'await',
        //logo a função deve ser transformada
        //em assíncrona usando 'async'
     })
BuscaPorId(id, res){
        const sql = `SELECT * FROM atendimentos WHERE id=${id}`
        conexao.query(sql, async (erro, resultados) => {
            const atendimento = resultados[0]
            const cpf = atendimento.cliente
            if(erro){
                res.status(400).json(erro)
            }
            else{
                const { data } = await axios.get(`http://localhost:8082/${cpf}`)

                atendimento.cliente = data

                res.status(200).json(atendimento)
            }
        })
    }

Funções callback são usadas como ultimo parâmetro e apenas quando o query() termina seu trabalho ele chama essa função para devolver um erro ou resultado, e assim é necessário transforma-la assincrona, pois será no bloco dessa função que estará o await.

Assim acredito que agora tenha resolvido, peço desculpa pelo engano e estarei aguardando seu resultado.