免责声明:这是我的第一个问题,我是 JavaScript 新手。
我试图通过使用 API 获取数据来填充一些 html 文本元素。这个 API 返回一个 JSON 对象,其中包含我需要的一些文本,但也返回一些我需要然后从中获取其他数据的 API URL。其中一些 URL 保存在数组中。因此,我需要获取一个 JSON 对象,遍历它,同时有时存储字符串,有时获取包含我需要的剩余文本的其他 JSON。我在处理承诺和异步执行时遇到了很多麻烦。我不知道如何等待一个 promise 完成,因此返回的数据一直未定义。
async function GetData(address) {
const response = await fetch(address);
const json = await response.json();
return json;
}
async function CleanData(origData) {
Object.entries(origData).forEach(async ([key,value]) => {
// look for arrays
if (Array.isArray(value)) {
value.forEach(async (element,i) => {
// look for links inside arrays
if (element.indexOf("https") != -1) {
let newData = await GetData(element);
// replace link with name or title
if (newData["name"] !== undefined) {
origData[key][i] = newData["name"]
} else if (newData["title"] !== undefined) {
origData[key][i] = newData["title"];
}
}
});
}
// look for links and replace with name
if (value.indexOf("https") != -1) {
let newData = await GetData(value);
origData[key] = newData["name"];
}
})
return origData;
}
function PopulateFields(fieldData) {
nameId.innerText = fieldData["name"];
valueIds.forEach(node => {
const nodeId = node.id;
node.innerText = fieldData[nodeId];
});
}
document.getElementById("button").addEventListener(
"click",async () => { // also tried without async using .then()
let data = await GetData(ApiUrl);
data = await CleanData(data);
PopulateFields(data);
}