Quando faço uma solicitação de busca e, em seguida, extraio o JSON, uma promessa é salva como uma variável com o JSON correto. Não consigo descobrir como extrair os dados da promessa na variável para realmente usá-los.
Quando testo a URL usando o Postman ou apenas a coloco no meu navegador, ele retorna JSON, então acredito que essa formatação seja um problema no meu código.
A função da chamada é a seguinte:
var responseData = await fetch('https://api.sampleapis.com/wines/reds')
.then((response) => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
var jsonData = response.json();
console.log(jsonData);
return jsonData
})
}
O json registrado no console se parece com isso:
Promise {<pending>}
[[Prototype]]
:
Promise
[[PromiseState]]
:
"fulfilled"
[[PromiseResult]]
:
Array(718)
O Array(718) contém a carga útil desejada, semelhante a esta:
[0 … 99]
[100 … 199]
[200 … 299]
[300 … 399]
[400 … 499]
[500 … 599]
[600 … 699]
[700 … 717]
length
:
718
O interior desses 8 arrays se parece com isso (o JSON finalmente está presente):
[0 … 99]
0:
{winery: 'Maselva', wine: 'Emporda 2012', rating: {…}, location: 'Spain\n·\nEmpordà', image: 'https://images.vivino.com/thumbs/ApnIiXjcT5Kc33OHgNb9dA_375x500.jpg', …}
1:
{winery: 'Ernesto Ruffo', wine: 'Amarone della Valpolicella Riserva N.V.', rating: {…}, location: 'Italy\n·\nAmarone della Valpolicella', image: 'https://images.vivino.com/thumbs/nC9V6L2mQQSq0s-wZLcaxw_pb_x300.png', …}
2:
{winery: 'Cartuxa', wine: 'Pêra-Manca Tinto 1990', rating: {…}, location: 'Portugal\n·\nAlentejo', image: 'https://images.vivino.com/thumbs/L33jsYUuTMWTMy3KoqQyXg_pb_x300.png', …}
3:
{winery: 'Schrader', wine: 'Cabernet Sauvignon RBS Beckstoffer To Kalon Vineyard 2015', rating: {…}, location: 'United States\n·\nOakville', image: 'https://images.vivino.com/thumbs/GpcSXs2ERS6niDxoAsvESA_pb_x300.png', …}
4:
{winery: 'Hundred Acre', wine: 'Wraith Cabernet Sauvignon 2013', rating: {…}, location: 'United States\n·\nNapa Valley', image: 'https://images.vivino.com/thumbs/PBhGMcRNQ7aVnVNr7VgnWA_pb_x300.png', …}
5:
{winery: 'Sine Qua Non', wine: 'Ratsel Syrah N.V.', rating: {…}, location: 'United States\n·\nCalifornia', image: 'https://images.vivino.com/thumbs/ZzMKzqFqRO-6oI3ys3gGgQ_pb_x300.png', …}
6:
{winery: 'Del Dotto', wine: 'The Beast Cabernet Sauvignon 2012', rating: {…}, location: 'United States\n·\nRutherford', image: 'https://images.vivino.com/thumbs/easjTPIcS-mCQ99XoYOMgQ_pb_x300.png', …}
7:
{winery: 'Darioush', wine: 'Darius II Cabernet Sauvignon 2016', rating: {…}, location: 'United States\n·\nNapa Valley', image: 'https://images.vivino.com/thumbs/U19RXtSdRMmoAesl2CBygA_pb_x300.png', …}
8:
{winery: 'Garbole', wine: 'Hurlo 2009', rating: {…}, location: 'Italy\n·\nVeneto', image: 'https://images.vivino.com/thumbs/f_G1SS0eT_C6hZGGwdEZqA_pb_x300.png', …}
9:
{winery: 'Scarecrow', wine: 'Cabernet Sauvignon 2016', rating: {…}, location: 'United States\n·\nRutherford', image: 'https://images.vivino.com/thumbs/pU7uFKR-TAKAOQaf3Hpn2A_pb_x300.png', …}
A API fetch funciona com um processo de resolução de Promise em duas etapas. Ao lidar com dados JSON, você precisa fazer isso
await
duas vezes: uma para a resposta inicial da rede e uma segunda para analisar o payload JSON.Então você precisa da
await
resolução da promessa retornada pelaresponse.json()
sua função basicAPICall.