Как перебрать массив в объекте, обновляя объект вызовами базы данных для каждого значения массива? - PullRequest
0 голосов
/ 27 июня 2019

Используя NodeJS, пытаясь обновить объект, используя другие значения, сохраненные в объектной модели. Объект содержит массив со значениями, которые используются для запроса набора других значений из MariaDB, а затем обновляют исходный объект. Узел последовательно просматривает все значения массива, затем последовательно повторяет каждый вызов db, затем возвращает объект, но без обновлений.

local object = {
    "type":null,
    "id":null,
    "code":null,
    "title":null,
    "description":null,
    "attrs":[
        {
            "attr_id":null,
            "attr_data_type":null,
            "attr_control_type":null,
            "fixed_list":null,
            "attr_fixed_list_values":[
                {
                    "attr_id":null,
                    "value_id:":null,
                    "fixed_list_value":null
                }
            ],
            "attr_name":null,
            "attr_value":null
        }
    ],
    "mv_attrs":[
        {
            "attr_id":null,
            "attr_data_type":null,
            "attr_name":null,
            "attr_values":[]
        }
    ]
};

Обратные вызовы не работают. Вложенные обратные вызовы не работают. Библиотека Q не является опцией.

// Passed in object is 'lo' (i.e. local object)

//iterate through each object attribute
    for(var a = 0; a < Object.keys(lo.attrs).length-1; a++) {

//get fixed value list for each attribute
        if (lo.attrs[a].fixed_list === 'Y') {

        const sql = 'select aflv.attr_id, aflv.value_id, aflv.attr_value as fixed_list_value from attr_fixed_list_values aflv where aflv.attr_id = ' + lo.attrs[a].attr_id;


            connection.query(sql, function(err, rows) {
                if (err) {
                    throw err;
                } else {
                    lo.attrs[a]["attr_fixed_list_values"]=rows;
                }
            })
    }
}
return (lo);  //at this point, lo has been updated

Цель состоит в том, чтобы заполнить массив фиксированных значений

"attr_fixed_list_values":[
    {
        "attr_id":null,
        "value_id:":null,
        "fixed_list_value":null
    }
],

для каждого атрибута в массиве attrs.

1 Ответ

0 голосов
/ 27 июня 2019

local object = {"type": null, "id": null, "code": null, "title": null, "description": null, "attrs": [{"attr_id": null, "attr_data_type ": null," attr_control_type ": null," fixed_list ": null," attr_fixed_list_values ​​": [{{attr_id": null, "value_id:": null, "fixed_list_value": null}], "attr_name": null,"attr_value": null}], "mv_attrs": [{"attr_id": null, "attr_data_type": null, "attr_name": null, "attr_values": []}]};

Обратные вызовы делаютне работа.Вложенные обратные вызовы не работают.Библиотека Q не представляется опцией.

// В объекте передается 'lo' (т. Е. Локальный объект)

// перебираем каждый атрибут объекта для (var a = 0; a

// получить список фиксированных значений для каждого атрибута if (lo.attrs [a] .fixed_list === 'Y') {

const sql = 'select aflv.attr_id, aflv.value_id, aflv.attr_value as fixed_list_value from attr_fixed_list_values aflv where aflv.attr_id = ' + lo.attrs[a].attr_id;


    connection.query(sql, function(err, rows) {
        if (err) {
            throw err;
        } else {
            lo.attrs[a]["attr_fixed_list_values"]=rows;
        }
    })

}} return (lo)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...