Hallo,
ich bin neu in der Javascript Welt und werde verrückt mit der Asynchronität.
Wäre super wenn ihr mir helfen könntet.
Der Problem Code:
Es geht um die Übergabe von param. Die Funktion set_export wird wiederholt aufgerufen und ich bekommen in der Funktion bis zum Aufruf von this.db.all auch die richtigen Werte aber in der Funktion this.db.all steht im Parameter param immer der letzten Wert der Schleife.
Ich habe ein Bind versucht und ein Object.create nichts hilft, ich habe irgendwie ein Verständnisproblem.
Könnt ihr mir da helfen?
Besten Dank und Gruß
Rene
ich bin neu in der Javascript Welt und werde verrückt mit der Asynchronität.
Wäre super wenn ihr mir helfen könntet.
Der Problem Code:
Code:
db_actions.prototype.get_changes = function (params) {
let row_count = 0;
let param = [];
return new Promise((resolve, reject) => {
let res_str = `{"daten":[`;
let q = `select * from client_import where user_id = "${params.user}" and client_id <> "${params.cid}" and tab = "${params.table}"`;
this.db.serialize(()=>{
this.db.each(q, [], (err, row) => {
if (err !== null) {
console.log("Error ", err);
return "";
}
param.push(params);
param[param.length - 1].imp_id = row.cimp_id;
param[param.length - 1].keyfield1 = row.keyfield1;
param[param.length - 1].keyfield2 = row.keyfield2;
param[param.length - 1].value1 = row.value1;
param[param.length - 1].value2 = row.value2;
param[param.length - 1].action = row.action;
param[param.length - 1].aedatfield = row.aedatfield;
//this.db.serialize(()=>{
this.set_export(param[param.length - 1]).then((r)=>{
//param.exp_id = r;
console.log("0value:", r.value1);
console.log("0expID: ", r.exp_id);
//res_str = res_str + this.table_select(param);
this.table_select(r).then((r) =>{
res_str = res_str + r;
row_count = row_count - 1;
if (row_count === 0){
res_str = res_str.substr(0, res_str.length - 1);
res_str = res_str + "]}";
resolve(res_str);
}
})
});
//})
}, (err, count) => {
row_count = count;
/* res_str = res_str.substr(0, res_str.length - 1);
res_str = res_str + "]}";
resolve(res_str);*/
})
})
})
}
db_actions.prototype.set_export = function(param){
return new Promise((resolve, reject) => {
this.db.serialize(()=>{
let q = `select * from client_export where user_id = "${param.user}" and cid = "${param.cid}" and cimp_id = "${param.imp_id}" and status <> "closed"`;
console.log("Q: ", q);
console.log("In P value:", param.value1);
console.log("In P expID: ", param.exp_id);
this.db.all(q, (err, rows_ce) => {
if (err !== null) {
console.log("Error ", err);
return;
}
if (rows_ce.length === 0) {
param.exp_id = "0";
} else {
param.exp_id = rows_ce[0].cexp_id.toString();
}
console.log("Param: ", param);
this.write_export(param);
resolve(param);
})
})
})
}
Es geht um die Übergabe von param. Die Funktion set_export wird wiederholt aufgerufen und ich bekommen in der Funktion bis zum Aufruf von this.db.all auch die richtigen Werte aber in der Funktion this.db.all steht im Parameter param immer der letzten Wert der Schleife.
Ich habe ein Bind versucht und ein Object.create nichts hilft, ich habe irgendwie ein Verständnisproblem.
Könnt ihr mir da helfen?
Besten Dank und Gruß
Rene
Zuletzt bearbeitet von einem Moderator: