Beiträge von caddy

    Danke für alle Tipps und Fragen ....


    die Herausforderung ist, das ich im negativen Fall trotzdem in den positiven zweig möchte.

    Ich habe es jetzt so gelöst:


    In der suche beim onsuccess in der Function


    Code
    request.onsuccess = function (event) {
       if (event.target.result === undefined) {
          resolve({found: false});
       } else {
          resolve(event.target.result);
       }
    };

    somit weiß ich ob er es gefunden hat oder nicht


    der Aufruf ist jetzt wie folgt:


    Damit prüfe ich ob der Key vorhanden ist

    wenn ja mache ich das update

    wenn nein lege ich ihn an


    Danke an alle für die Hilfe.


    Caddy

    Code
    get_record(key).then(response => {
       return response;
     }).then(processedResponse => {
       if (processedResponse === true) {
          console.log('data: ' + data)
          update_record(data);
       } else {
         insert_record(data);
       }
     })

    an der Stelle kommt in der Konsole das -> data: [object Promise]


    der Inhalt von [object Promise] ist meine Daten die gelesen wurde {key:"123", name: "Caddy"}

    ich muss dann z.b. {key:"123", name: "Caddy", Member: true}

    daraus machen und mit

    Code
    update_record(data);


    in der datenbank updaten


    Danke


    Caddy

    Die andere Frage wäre ...

    Wie sieht denn der Code jetzt aus? Also der Funktion und des Aufrufs der Funktion?


    Das ist der Hauptcode

    data sinddie Daten {...}

    strkey ist der zu suchende key der natürlich auch bestandteil von data ist


    Code
    get_record(key).then(response => {
       return response;
     }).then(processedResponse => {
       if (processedResponse === true) {
          update_record(data);
       } else {
         insert_record(data);
       }
     })


    Das ist die Get function



    und wenn die Get funktion was findet ist das die update funktion

    Gefunden kann sein das sich ein knoten geädert hat oder ein neuer dazu gekommen ist


    Code
    function update_record(record) {  if (db){    const update_transaction = db.transaction(tablename, 'readwrite');    const store = update_transaction.objectStore(tablename);
        return new Promise((resolve, reject) => {      update_transaction.onerror = function(event) {        console.log('Update Transaktion kann nicht durchgeführt werden ' + event.target.errorCode);        resolve(false);      }        update_transaction.oncomplete = function (){        console.log('Update Transaktion durchgeführt !');        resolve(true);      }        let request = store.put(record);      request.onerror = function() {        cosnoel.log('PUT request update_record onerror');        resolve("error");      }      request.onsuccess = function() {        cosnoel.log('PUT request update_record onsuccess');        resolve("error");      }    });  };}


    Code
    insert_record(data);


    habe ich mal gepart, denn das funktioniert ja einwandfrei


    Danke für Deine Hilfe


    Caddy

    Nur noch mal zur Sicherheit damit meine Frage verstanden wird:


    Speichern in indexedDB geht

    Eine suche nach vorhandenen geht auch alles bestens


    ABER


    einen zu suchen und dann zu ergänzen und oder bearbeiten das bekomme ich nicht hin



    Meine idee dazu ist


    funktion suchen

    gefunden -> dann updaten genau mein Problem

    nicht gefunden -> dann einfügen habe ich kein Problem ....




    Meine get dazu ist weiter oben.


    Vielen Dank an alle schon mal ...


    Caddy

    caddy get_record ist kein Standard JavaScript. Welches Modul/Framework verwendest du denn?

    Außerdem verwendest du get_record Synchron. Wieso wrappst du die dann nochmal ein ein Promise?

    hallo Andreas,


    danke für deine Antwort.


    ich verwende ein selbst geschriebenes get_record

    es sieht so aus :


    das outcome würde ich gerne zum bearbeiten und dann updaten nutzen

    Hast du Dir die Grundlagen einer Promise durchgelesen? Verstehst du was eine Promise ist und was sie tut? Vielleicht liest du Dich noch etwas ein in die asynchrone Programmierung. :)


    https://developer.mozilla.org/…ript/Guide/Using_promises


    Wenn du einen Fehler werfen willst solltest du reject() benutzen. Das return vor dem resolve() ist unnötig. Im resolve drin gibst du die Daten weiter, welche du anschliessend verwenden willst. Und dann nutzt du .then() um die Daten zu verwenden sobald die Promise fertig ist.

    Hallo jonas,


    danke für Deine Antwort.

    Promise kenne ich und ist auch alles klar ...

    Mein Problem ist das updaten der Daten ....

    Schreiben und lesen mache ich mit promise

    updaten kann ich nur wenn ich die Daten bearbeite und da hängt es bei mir


    grüße caddy

    Hallo,


    mein erster Prost ... Danke für die Aufnahme ....


    ich fülle in eine Indexed DB Daten in JSON Form.

    Diese möchte ich nun updaten.

    Dazu habe ich aus einem Youtube eine funktion get_record(key)

    Diese gibt die Daten wenn sie gefunden werden zurück.

    Wenn ich mir die Daten in der Funktion anzeigen lassen bekomme ich das JSON angezeigt.

    Wenn ich diese dann zurück gebe kommt dort dann immer nur [object Promise]

    Ich möchte diese daten aber

    a) sehen

    b) verändern


    Hier mein Code:


    Code
    let savetodb = new Promise(function(resolve,reject){
       let processedResponse = get_record(key); 
       if (processedResponse === false) { 
          return resolve("false") } 
       else { 
          return resolve("true") 
       }
    });
    console.log('test 2 ' + savetodb);

    Das Ergebnis ist

    test 2 [object Promise]


    während wenn ich das selbe in der function mache kommt dort

    Aufruf:

    console.log('test 2 ', event.target.data);

    Ausgabe:

    test 2 {key:"123", Name: "Caddy"}



    Hier habe ich im Grunde 2 Fragen


    1) wie kann ich ausserhalb der Function den JSON anzeigen ? stringify klappt leider nicht

    2) wenn ich es dann anzeigen kann würde ich es gerne erweitern

    vorher {key:"123", name: "Caddy"}

    nachher {key:"123", name: "Caddy", Member: true}


    Ich hoffe, ich konnte es verständlich zu erklären.


    Danke Caddy