Как вернуть объект JSON из mysql?

#javascript #mysql #node.js

#javascript #mysql #node.js

Вопрос:

Я пытаюсь установить этот объект:

 var userPref = {} 
  

к возвращению mysql из этого запроса:

 var qSelect = "SELECT age_min, age_max, max_distance, partner_gender_id, partner_children, partner_family_plans FROM User_Preferences WHERE user_id = ?";
            var qValues = [user_pref_id];
            var qCall = mysql.format(qSelect, qValues);
            connection.query(qCall, function(err, userPrefFound, fields) {
                if (err) {
                    console.log("get my preferences error: "   err);
                    callback(false);
                } else {
                    userPref = userPrefFound[0];
                    console.log("userPref", userPref)
                    if (userPrefFound.length > 0 amp;amp; userPref.max_distance < 300) {
                        getUserLocation();
                    } else {
                        getUserPrefEth();

                    }
                }
            });
  

Мой userPref выводится как RowDataPacket

 userPref RowDataPacket {
  age_min: 18,
  age_max: 65,
  max_distance: 5,
  partner_gender_id: 2,
  partner_children: 2,
  partner_family_plans: 3 }
  

что тогда не позволяет мне установить объект следующим образом

 var politics_interested = [];
        var qSelect = "SELECT politics_type FROM User_Pref_Politics WHERE user_id = ?";
        var qValues = [user_pref_id];
        var qCall = mysql.format(qSelect, qValues);
        connection.query(qCall, function(err, userPrefPolitics, fields) {
            if (err) {
                console.log("get my preferences politics error: "   err);
                callback(false);
            } else {
                if (userPrefPolitics.length > 0) {
                    userPrefPolitics.forEach(function(i) {

                        politics_interested.push(i.politics_type);
                    });
                }
                console.log("politics_interested", userPref)
                userPref["politics_interested"] = politics_interested;
                getUserPrefMarital();

            }
        });
  

и выводит эту ошибку:

 node_modulesmysqllibprotocolParser.js:437
      throw err; // Rethrow non-MySQL errors
      ^

TypeError: Cannot set property 'politics_interested' of undefined
  

Как мне получить возвращаемое значение из mysql и установить его как объект?

Я попробовал это для массива userPref[‘religious_level_interested’] = JSON.parse(JSON.stringify(userPrefRelig)); но когда я пробую это для объекта, это не работает, не уверен, что это тоже работает.

Комментарии:

1. Является ли второй connection.query вызов a внутри getUserPrefEth() функции?

2. Они находятся в отдельных функциях, но userPref = {} находится вне их

3. Возможно ли, что есть условие гонки, хм

4. ДА. Я полагаю, вы пытаетесь установить politics_interested до завершения первого запроса.