Heim > Datenbank > MySQL-Tutorial > Warum wird mein Versprechen in Node.js mit Express und Promises vorzeitig aufgelöst?

Warum wird mein Versprechen in Node.js mit Express und Promises vorzeitig aufgelöst?

DDD
Freigeben: 2024-11-17 15:32:02
Original
923 Leute haben es durchsucht

Why Does My Promise Resolve Prematurely in Node.js with Express and Promises?

Node.js Express und Versprechen: Behebung unvorhersehbaren Verhaltens

Ursache für nicht erwartete Versprechen

In Ihrem Code wird das für die findUser-Funktion erstellte Versprechen ausgeführt sofort, aber die Funktion selbst ist asynchron. Daher wird das Versprechen vorzeitig aufgelöst, bevor findUser Daten abrufen kann.

Implementieren der richtigen Promise-Ausführung

Ändern Sie Ihre findUser-Funktion so, dass sie ein Versprechen zurückgibt, anstatt zu versuchen, Werte synchron zurückzugeben. Hier ist ein Beispiel:

me.findUser = function(params, res) {
    var username = params.username;

    return new Promise(function (resolve, reject) {

      pool.getConnection(function (err, connection) {
        if (err) {
          reject(err);
          return;
        }

        connection.query('select Id, Name, Password from Users ' +
            'where Users.Name = ?', [username], function (err, rows) {
            connection.release();
            if (err) {
                reject(err);
            } else {
                resolve(rows);
            }
        });
      });
    });
}
Nach dem Login kopieren

Fehlerbehandlung

Die Meldung „Fehlerhandler zweiter“ wird angezeigt, weil der Fehlerhandler im zweiten Versprechen abgelehnt wird, wenn findUser auf einen Fehler stößt. Um dies zu beheben, ändern Sie den Code wie folgt:

promise.then(function(data) {
            return new Promise(function (resolve, reject) {
                loginC.doSomething(data);

                if (success) {
                    console.log("Success 2");
                    resolve(data);
                } else {
                    console.log("Failed 2");
                    reject("Error in doSomething");
                }
            });
        }).catch(function (reason) {
            console.log("Error in findUser: " + reason);
        });
Nach dem Login kopieren

Zusätzliche Hinweise

  • Stellen Sie sicher, dass Datenbankverbindungsfehler im Verbindungsrückruf behandelt werden.
  • Verlassen Sie sich nicht zu synchronen Methoden für asynchrone Vorgänge.
  • Promises werden zur Verkettung asynchroner Vorgänge und zur Verarbeitung von Ergebnissen verwendet zuverlässig.

Das obige ist der detaillierte Inhalt vonWarum wird mein Versprechen in Node.js mit Express und Promises vorzeitig aufgelöst?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage