Вложенный сценарий цикла foreach

Итак, прямо сейчас я работаю над спокойным 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.log("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": []
},
testfunction возвращает пустой массив, поскольку http.get завершает асинхронно. См. Ответы на связанный вопрос, чтобы узнать подробности и способы решения этой проблемы.
T.J. Crowder 10.08.2018 14:33

Вы, вероятно, захотите использовать обещания вместе с функцией Promise.all.

Automatico 10.08.2018 15:42
1
2
36
0

Другие вопросы по теме