dedlfix: Request Error

Beitrag lesen

Tach!

leider geht meine umsetzung davon nicht:

Es sieht mir so aus, als ob du den zeitlichen Ablauf noch nicht verstanden hast, denn in dem Code ist er nicht berücksichtigt.

        var test = new Promise(function(resolve, reject) {db.all(statment, function(err, rows) {
            resolve(rows);
        })});
        
        var pro = function () {
            test.then(function (rows) {
                db.run(statmentLokal);
            })
            .then(function() {
                db.run(statmentLokal);
            })
            .then(function(){
                db.run(statmentLokal);
            })
            .catch(function (error) {
                console.log(error.message);
            });
        }

Ich hab mal die Teile entfernt, die nichts mit dem zeitlichen Ablauf zu tun haben. Du hast da einen db.run()-Aufruf (mehrere, aber das Folgende gilt für alle gleichermaßen). Dieser läuft asynchron. Er ist erst dann beendet, wenn die Callback-Funktion aufgerufen wird. Die hast du aber weggelassen, so dass du nicht mitbekommst, wann der nächste Aufruf stattfinden darf. Stattdessen kehrt db.run() sofort zurück und beendet damit die anonyme Funktion, in der es steht. Damit ist für das Promisehandling klar, dass mit dem nächsten then() fortgefahren werden kann. Das darf es aber nicht. Du musst an der Stelle ein unerfülltes Promise zurückgeben, das sich erst dann erfüllen darf, wenn der Callback durch ist. Erst mit diesem unerfüllten Promise wartet das Promisehandling mit dem Fortfahren beim nächsten then(). Du bekommst aber vom db-Objekt keine Promises, und musst dir deshalb eins selbst erstellen. Für jeden Vorgang in der Kette.

Das nennt man Promise-Chaining und ist unter anderem beim Promise.prototype.then() beschrieben. (Der Abschnitt Return value ist auch wichtig).

dedlfix.