Это вариант для случая если функция getData необходима, там как можно просто воспользоваться fetch и передать в результат его выполнения функцию showData, не оборачивая fetch лишний раз в асинхронную функцию...
В функции showData не все ключи присутствуют в ответе, там уже сами решите что убрать, а что оставить
// get data
async function getData() {
let result = await fetch("https://jsonplaceholder.typicode.com/posts")
.then((response) => response.json());
// .then(json => console.log(json)) - эту строчку убираем, она приводила к тому, что fetch не возвращал результат
return result;
}
// show data
getData().then((result) => showData(result));
function showData(allGoods) {
let outGoods = "";
for (let key in allGoods) {
outGoods += `
<div class="goods__item">
<a><img src="${allGoods[key].image}"/></a>
<div class="goods__tx">
<h2>${allGoods[key].name}</h2>
<p>${allGoods[key].desc}</p>
<span>${allGoods[key].availability}</span>
<div class="goods__bottom">
<b>${allGoods[key].price} $</b>
<div class="goods__btn">
<button class="goods__minus" data-id="${key}">-</button>
<button class="goods__plus" data-id="${key}">+</button>
</div>
</div>
</div>
</div>`;
}
let goodsContent = document.querySelector(".goods .container");
goodsContent.innerHTML = outGoods;
}