O id catalogo está dentro de index.html que estou te mandando agora:
<!DOCTYPE html><htmllang="en"><head><linkrel="shortcut icon"href=""/><metacharset="UTF-8"/><metaname="viewport"content="width=device-width, initial-scale=1.0"/><metahttp-equiv="X-UA-Compatible"content="ie=edge"/><title>Make Up Catalog</title><linkrel="stylesheet"href="css/style.css"/></head><body><header><h1>Make Up Catalog</h1></header><main><formclass="catalog-control"><divclass="form-control"><labelfor="filter-name">Nome:</label><inputtype="text"id="filter-name"/></div><divclass="form-control"><labelfor="filter-brand">Marca:</label><selectid="filter-brand"><optionvalue="">Todos</option></select></div><divclass="form-control"><labelfor="filter-type">Tipo:</label><selectid="filter-type"><optionvalue="">Todos</option></select></div><divclass="form-control"><labelfor="sort">Ordem: </label><selectid="sort-type"><option>Melhor Avaliados</option><option>Menores Preços</option><option>Maiores Preços</option><option>A-Z</option><option>Z-A</option></select></div></form><sectionclass="catalog"></section></main><divid="catalogo"></div></body><scriptsrc="js/app.js"></script></html>
Veja que app.js esta dentro de uma pasta chamada js e index.html que está sendo executado sem problema está um nivel acima da pasta js.
Lucas_Camara1 like
Um problema é a forma como vc está tratando a parte assíncrona. Vejo que vc está criando variáveis fora do escopo para receber os dados de algo que não se sabe quando será retornado (assíncrono), o que deixa o código falho sujeito a erros.
Refiz o código e coloquei uns comentários para tentar explicar:
// Função que realiza a chamada HTTP para recuperar os dadosfunctionlerDados(callback){fetch("http://makeup-api.herokuapp.com/api/v1/products.json").then((resp)=>{// Obtém a resposta da requisição HTTP e faz a conversão para JSON// Em seguida invoca a função callback passando os dados recebidosresp.json().then((data)=>callback(data));});}// Monta a string com o conteúdo html para ser renderizado na DIVfunctionrenderTabela(produtos){letlinhas=produtos.map((produto)=>{return`<tr><td>${produto.name}</td><td>${produto.price}</td></tr>`;});return`<table>${linhas.join("")}</table>`;}// Obtém a DIV onde a tabela será renderizada e adiciona um texto para indicar que os daados estão sendo carregadosconstcatalogo=document.getElementById("catalogo");catalogo.innerText="Loading...";// Chama a função que recupera os dados passando uma função callback que irá receber os dados no formato jsonlerDados((dados)=>{lettabela=renderTabela(dados);catalogo.innerHTML=tabela;});
anyblueangel3
Deu certo!!! Obrigado.
anyblueangel3
Lucas, e se eu quiser fazer o fetch de forma asincrona numa função async que codigo devo usar?