NodeJS - Создать динамический c JSON из данных, полученных через базу данных - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь сгенерировать динамический c JSON на основе структуры динамического c, определенной в БД. Но функция не ждет, пока ответ не будет получен из базы данных.

Ожидаемый JSON:

{
    "ROOT_1": [
            {
                "ROOT_2.1": {
                    "column2.1": 1,
                    "column2.1.1": "XXX"
                },
                "ROOT_2.2": [
                    {
                        "column2.1": 1,
                        "column2.2.1": 11
                    },
                    {
                        "column2.1": 1,
                        "column2.2.1": 12
                    }
                ],
                "ROOT_2.3": [
                    {
                        "column2.1": 1,
                        "column2.3.1": 21
                    },
                    {
                        "column2.1": 1,
                        "column2.3.1": 22
                    },
                    {
                        "column2.1": 1,
                        "column2.3.1": 23
                    }
                ]
            },
            {
                "ROOT_2.1": {
                    "column2.1": 1,
                    "column2.1.1": "XXX"
                },
                "ROOT_2.2": [
                    {
                        "column2.1": 1,
                        "column2.2.1": 11
                    },
                    {
                        "column2.1": 1,
                        "column2.2.1": 12
                    }
                ],
                "ROOT_2.3": [
                    {
                        "column2.1": 1,
                        "column2.3.1": 21
                    },
                    {
                        "column2.1": 1,
                        "column2.3.1": 22
                    },
                    {
                        "column2.1": 1,
                        "column2.3.1": 23
                    }
                ]
            }
        ]
}

Фактический JSON:

{
  "ROOT_1": [
    {},
    {}
  ]
}

Все столбцы сгенерированный из базы данных и назначенный как объект.

Я попытался выполнить обещание для вызова базы данных и ожидания ответа, но данные не связываются. Ожидание звонит до ответа от БД.

async function getJSON(){
 for (var m = 0; m < masterDataList.length; m++) {
   var childObj = {};
   var childList = [];
   rootDataList.push(parseObjData(childObj, getChildList(null), masterDataList[m]));
   }

 await Promise.all(rootDataList).then(function () {
            context.res = {
            body: root
        };
        context.done();
    }, function () {
    return context.res = {
        status: 400,
        body: APP_CODE + "Error fetching data"
    };
});
}
function parseObjData(dynamicObj, structureMapList, masterDataObj) {
  for (var sml = 0; sml < dynamicObj.length; sml++) {
  var rowDataPromise = getRowDataList(); //data that fetches from DB
  rowDataPromise.then(function (rowData) {
   parseObjData(rowData,structureMapList,masterDataObj);
  }, function () { });
 }
} 

function getRowDataList() {
    return new Promise((resolve, reject) => {
        req.query(sqlQuery).then(function (result) {
            return resolve(result.recordset);
        }).catch(function (err) {
            return reject(err);
        });
    });
}

Любое предложение будет большой помощью ... !!!

1 Ответ

0 голосов
/ 26 февраля 2020

Эта строка return rowData; не работает, поскольку вы ожидаете, что она будет работать. Вы могли бы написать это так:

var row;
rowDataPromise.then(function (rowData) {
    row = rowData;
}, function () { });
return row;

И использовать asyn c с этой функцией.

...