Ich bin ein echter Neuling in node.js so pls meine mögliche Dummheitaktualisieren Variablenwert in Modul
Ich verstehe ich versucht, eine externe Datei zu verwenden, als Modul zu dienen, damit ich in verwenden kann andere Dateien. Das Projekt ist größer als das, aber sagen wir mal mein Modul ist:
var Tools = module.exports = {
result_arr: [],
object_data: {
times : [],
temps1 : [],
temps2 : [],
temps3 : [],
temps4 : [],
levels : [],
flows : []
},
getLastNRows: function (whereIsData, DB_info, table, NRows) {
if (whereIsData == "MySQL") {
function setValue (value) {
Tools.result_arr = value;
}
function dataArray2Object (array_data) {
Tools.object_data.times = array_data.map(row => row.timestamp);
Tools.object_data.temps1 = array_data.map(row => row.temp1);
Tools.object_data.temps2 = array_data.map(row => row.temp2);
Tools.object_data.temps3 = array_data.map(row => row.temp3);
Tools.object_data.temps4 = array_data.map(row => row.temp4);
Tools.object_data.levels = array_data.map(row => row.level_ice_bank);
Tools.object_data.flows = array_data.map(row => row.flow);
}
var queryString = "SELECT timestamp, temp1, temp2, temp3, temp4, level_ice_bank, flow FROM " +
table + " ORDER BY id DESC LIMIT " + NRows + ";";
var connnection = mysql.createConnection(DB_info);
connnection.connect(function(err) {
console.log("connected");
if (err) throw err;
});
connnection.query(queryString, function (err, rows) {
console.log("queried");
if (err) throw err;
setValue(rows);
dataArray2Object(Tools.result_arr);
console.log(Tools.result_arr);
console.log(Tools.object_data);
});
}
else {
console.log("Function only accepts data stored in MySQL.\n(u still have to improve...)");
return;
}
};
Die Variable object_data
soll in einer Hauptdatei verwendet werden. Auf diese Weise erwarte ich, dass ich getLastNRows
object_data
durch die Operationen in getLastNRows
aktualisiert werde. Die Hauptdatei wäre:
var tools = require('./tools');
var where2save = "MySQL";
var info_db = {
host : "127.0.0.1",
user : "root",
password: "xxxx",
database: "mydb",
port : 3306
};
var table = "tempdata";
var NRows = 4;
tools.getLastNRows(where2save, info_db, table, NRows);
console.log(tools.object_data);
Was beobachtet wird, ist, dass in der Tat, tools.object_data
nicht durch getLastNRows
in der Hauptdatei aktualisiert wird, obwohl console.log(Tools.object_data);
von dem tools.js (Modul) Datei protokolliert die aktualisierten Werte. Also meine Frage ist:
Wie kann ich getLastNRows
update tools.object_data
(die leer ist, wenn erstellt) in der Hauptdatei machen?
es wahrscheinlich ist async (zumindest 'connection.query()' ist async). Weißt du überhaupt, auf 'getLastNRows' zu warten, bevor die nächste Codezeile ausgeführt wird? – arocha
Ich habe gerade ein Update mit einem Code-Snippet bereitgestellt, das funktionieren sollte. Sie müssen einen Callback an 'getLastNRows' übergeben. Vielleicht möchten Sie in "Versprechen" oder "Asynchron/Warten" schauen, wenn Sie nicht mit einer alten Knotenversion festgefahren sind. – RNikoopour
Vielen Dank, Ihr Code hat funktioniert! Ich weiß, du hast geantwortet, was ich gefragt habe, aber das ist nicht genau das, was ich wirklich brauche. Was ich wirklich brauche, ist 'tools.object_data' in einer Variablen zu speichern, die in der nächsten Zeile verwendet wird (wie' var foo = tools.getLastNRows (where2save, info_db, table, NRows, function() {return tools.object_data;}); ') OR dass die nächste Codezeile gerade ausgeführt wird, wenn der Wert von' tools.object_data' aktualisiert wird. Können Sie mir dabei helfen? – arocha