2016-07-23 13 views
3

Ich erstellte eine separate Datei mit allen meinen Abfragen mit pg-promise Modul für Knoten. Während für die meisten von mir verwende ich nur req, res nach einer Abfrage, für eine möchte ich einen Wert zurückgeben. Es funktioniert nicht. Es gibt undefined zurück.Rückgabe in pg-Versprechen

passportLogin: (email)=> { 
     db.one(`SELECT userid 
       FROM user`) 
      .then(result => { 
       return result; 
      }) 
      .catch(error => { 
       return error; 
      }); 
    } 
+0

Sie definieren eine Funktion ohne Rückgabewert, also was erwarten Sie? Fügen Sie vor 'db.one()' eine 'return' hinzu und Sie sollten das Versprechen erhalten. – Sirko

+0

Das Hinzufügen von 'return' vor' db.one() 'und das Entfernen der beiden anderen 'returns' gibt ein leeres Objekt zurück. – ocram

+0

Dein 'then()' und 'catch()' sind sowieso ziemlich nutzlos, also werde sie alle zusammen los. – Sirko

Antwort

1

Dieser Code hat zwei Probleme gleichzeitig:

  • ungültig Versprechen Gebrauch, wenn innerhalb .catch Sie return result tun, das ist nicht, wie Versprechen Spuck gehandhabt werden, müssen Sie entweder die Fehlerbehandlung zur Verfügung stellen, oder den Fehler erneut werfen/zurückweisen.
  • ungültige Verwendung von pg-promise Bibliothek. Sie verwenden Methode one, die ablehnen soll, wenn etwas anderes als 1 Datensatz zurückgegeben wird, as per the method's documentation, und gleichzeitig sagen Sie I need to catch if it returns more than one row..., was ein logischer Widerspruch ist.

Das Ergebnis ist wie folgt: Ihre Abfrage erfolgreich ausgeführt wird, und mehr als einen Datensatz zurückgibt, was wiederum Methode macht one ablehnen, und dann nehmen Sie die Ablehnungsgrund und machen es zu einem aufgelöst ein, indem Sie return result. Alles in allem ist Ihr Code überall kaputt.

Zuerst, mit pg-promise sollen Sie die richtige Methode verwenden, entsprechend der Anzahl der Datensätze, die Sie zurück erwarten, siehe The Basics.

Und dann handle .then/.catch nach Ihrer Geschäftslogik. Ich kann hier nicht genauer sein, weil Sie dazu keine näheren Angaben gemacht haben.