Итак, прямо сейчас я работаю над спокойным API, и для этого конкретного маршрута мне нужно использовать данные из двух разных существующих API, которые я объединяю в один массив объектов, который я возвращаю по маршруту GET как объект JSON.
Итак, в этом случае я получаю верхний класс из определенного API, затем я получаю нижний класс из другого API на основе значения из первого API. Для этого я выполняю вложенный цикл forEach, но массив объектов, который я затем добавляю в результат первого API, не существует. Так что кажется, что часть моего кода, которая должна пройти через второй вызов API, никогда не достигается. Кто-нибудь знает, что здесь пошло не так? Я смотрел на эту проблему несколько дней и не могу понять, где я ошибся.
Большое спасибо за помощь, буду рад ответить на ваши вопросы и подробно рассказать о своей проблеме, если она слишком расплывчато описана.
Br, Виктор
function ObjectHandler(obj: any): object[] {
const returnobject: object[] = [
];
obj.forEach((e: any) => {
const spec = e.codevalue;
const specLC = spec.toLowerCase();
const url: string = "http://baseurlexample.com/" + specLC;
const underclassRAW = testfunction(url);
const underclass: object[] = [
];
underclassRAW.forEach((e: any) => {
const metadata = e.metadata.find((e: any) => e.lang === "EN");
const uc_keyvalues = {
value: e.codevalue,
explanation: metadata.name,
description: metadata.description,
};
underclass.push(uc_keyvalues);
});
const metadata = e.metadata.find( (e: any) => e.lang === "EN");
const keyvalues = {
value: e.codevalue,
explanation: metadata.name,
underclass: underclass,
};
returnobject.push(keyvalues);
});
return returnobject;
}
function testfunction (URL: String): object[] {
const value: object[] = [
];
let data = "";
https.get(URL, (resp: Response) => {
resp.on("data", (chunk: any) => {
data += chunk;
});
resp.on("end", () => {
const newdata = JSON.parse(data);
value.push(newdata);
});
})
.on("error", (err: Error) => {
console.info("Error: " + err.message);
});
return value;
}
Как должен выглядеть returnobject:
[
{
"value": "A",
"explanation": "something",
"underclass": [
{
"value": "A1",
"explanation": "something",
"description": "something."
},
{
"value": "A2",
"explanation": "something",
"description": ""
},
{
"value": "A3",
"explanation": "A3",
"description": "something"
},
{
"value": "A4",
"explanation": "Something",
"description": ""
}
]
},
Как это выглядит:
[
{
"value": "A",
"explanation": "something",
"underclass": []
},
Вы, вероятно, захотите использовать обещания вместе с функцией Promise.all.
testfunction
возвращает пустой массив, посколькуhttp.get
завершает асинхронно. См. Ответы на связанный вопрос, чтобы узнать подробности и способы решения этой проблемы.