Olá, Victor!
Obrigado pelo retorno!
Então, talvez eu esteja fazendo confusão!
O atual estado do médico está assim:
const uploadBtn = window.document.getElementById("upload-btn");
const inputUpload = window.document.getElementById("image-upload");
uploadBtn.addEventListener("click", () => {
inputUpload.click();
})
function lerConteudoDoArquivo (arquivo) {
return new Promise((resolve, reject) => {
// responsável por ler o arquivo que está sendo recebido como parâmetro da função
const leitor = new FileReader();
// resolve - chamado quando o objeto é lido com sucesso
leitor.onload = () => {
// cria um objeto {} com url e nome
resolve({url: leitor.result, nome: arquivo.name});
}
// reject - chamado se algo der errado
leitor.onerror = () => {
reject(`Erro na leitura do arquivo ${arquivo.name}`);
}
leitor.readAsDataURL(arquivo);
})
}
const imagemPrincipal = document.querySelector(".main-imagem");
const nomeDaImagem = document.querySelector(".container-imagem-nome p");
// a validação do tipo de imagem e seu tamanho pode ocorrer aqui (testar)
inputUpload.addEventListener("change", async (event) => {
const arquivo = event.target.files[0];
if (arquivo) {
// Aqui, esse try / catch é uma funcionalidade de funções assíncronas também.
try {
// precisamos determinar o que queremos que seja esperado, então utilizamos 'await' antes da chamada da função
const conteudoDoArquivo = await lerConteudoDoArquivo(arquivo);
imagemPrincipal.src = conteudoDoArquivo.url;
nomeDaImagem.textContent = conteudoDoArquivo.nome; //nome foi definido dentro do resolv, na linha 36
} catch (error) {
console.error("Erro na leitura do arquivo");
}
}
})
Acontece que, ao olhar pra essa estrutura, eu fico meio perdido. Acredito que isso ocorra em função da função "lerConteudoDoArquivo ( )" estar no "topo" do projeto. Mas, olhando com mais calma, acho que intendi.
A validação ocorrerá assim que o evento change do botão "inputUpload" for "chamado", correto? Uma vez "validado", o if dentro desse evento será o próximo trecho de código a ser executado.
Ou seja, o local onde a função "lerConteudoDoArquivo ( )" está situada no código pouco importa, uma vez que ela foi criada apenas com o objetivo de ser uma promessa para a operação assíncrona LER UM ARQUIVO" e será chamada assim que o evento de mudança ocorrer.
Tipo, criamos uma função que retorna uma promessa e essa função será chamada posteriormente por um evento em específico. A partir daí, as validações deverão ocorrer dentro do evento e não dentro da função que retorna uma Promise.
Seria mais ou menos isso ou eu estou viajando demais?
Desculpa minha ignorância!