Ergebnis 1 bis 2 von 2
  1. #1
    relei2004 ist offline Grünschnabel
    registriert
    09-10-2020
    Beiträge
    1

    Asynchrone Werteübergabe

    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:
    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
    Geändert von mikdoe (10-10-2020 um 09:10 Uhr) Grund: Code Tags

  2. #2
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.750

    AW: Asynchrone Werteübergabe

    Du hast mehr ein Logikproblem als eines mit der Asynchronität. Der param Parameter bei set_export ist immer das gleiche Objekt wie params von get_export. Du musst in der "Schliefe" für jede Zeile ein neues Objekt erstellen - schau' dir das param-Array in set_export am Ende an - da sind überall die gleichen Daten drin.

Ähnliche Themen

  1. Verständnisproblem asynchrone Aufrufe
    Von PeterM1 im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 23-09-2020, 11:27
  2. Asynchrone Datenbank und Event pagebeforeshow
    Von tomtom50 im Forum JavaScript
    Antworten: 5
    Letzter Beitrag: 26-07-2011, 14:14
  3. Asynchrone Anfrage an Server mittels JSP
    Von xplox im Forum Serverseitige Programmierung
    Antworten: 3
    Letzter Beitrag: 16-12-2008, 11:47
  4. Werteübergabe
    Von Carre im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 16-09-2007, 11:47
  5. Werteübergabe
    Von Redpadz im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 05-04-2001, 17:49

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •