Вы не делаете ничего асинхронного, вам не нужны ни обратные вызовы, ни обещания.Просто синхронно верните значение.
В вашем текущем коде все, что вам нужно сделать, это console.log(item)
после вызова.
Лучшим подходом было бы создание объекта внутри функции и return
это, хотя:
function productData(elem, items={}) {
if (elem.hasAttribute("itemprop")) {
const itemProp = elem.getAttribute("itemprop");
const itemText = elem.textContent;
items[itemProp] = itemText;
}
for (const child of elem.children) {
productData(child, items);
}
return items;
//^^^^^^
}
// Get All Products on the page
const productItems = productData(document.querySelector('[itemtype="http://schema.org/Product"]'));
console.log(productItems);