2017-05-27 3 views
1

Hallo ich möchte eine einfache Boolesche mit dort Optionen zurückzukehren: - true: Benutzer existiert in der Datenbank - false: Benutzer existiert nicht in der DatenbankRückgabewert von Callback-Funktion

Hier ist meine Nicht-Arbeits Code:

database.users.get("test-username", function (err, value) { 
    if (err) { 
     return err; 
    } else { 
     return value; 
    } 
}) 

Die Rückkehr ist immer undefined ich weiß, dass NodeJS Asynchron arbeiten soll, aber async Funktionen erlauben mir nicht etwas zurückzukehren. Ich stecke fest, bitte hilf!

Auch verwende ich LevelUP als Datenbanksystem. (Wenn mein Problem keine Lösung hat, gibt es ein anderes Datenbanksystem in NodeJS, das synchrone zulassen?)

Danke an die Community!

Antwort

1

Erhalten Sie etwas zurück, wenn Sie Ihre Rückkehr console.log? zum Beispiel:

function dbCall(){  
database.users.get("test-username",function(err, value){ 
    if(err){ 
      return false; 
    }else{ 
     console.log(value); 
     return value; 
    } 
} 
} 

, wenn Sie etwas in Wert bekommen dann der Grund, Sie ist nicht etwas im Gegenzug sehen, da der API-Aufruf asynchron ist. Sie müssen ein Versprechen abgeben.

new Promise(resolve,reject){ 
    let data = dbCall(); 
    if(data == false) 
     reject(data); 
    else 
     resolve(data); 
} 
+0

Sicher, console.log funktioniert im Callback, außerhalb des Callback funktioniert nichts. Ich fand eine andere Lösung, ist Funktion mit 'req' und' res' Parameter (ExpressJS) aufrufen, so kann ich Antwort direkt mit 'res.send (Antwort)' in Callback –

+0

Der Grund, warum es nicht funktioniert, weil Ihr Programm wartet nicht darauf, dass ein Async-Aufruf zurückgerufen wird, bevor Sie fortfahren. Aber ja req und Res sollte auch funktionieren :) Allerdings müssen Sie kompliziertere Operationen mit den Daten tun, ich empfehle Ihnen, Versprechungen und Async-js-Bibliothek nachschlagen. – Leon

+0

Ja, ich habe endlich Promise Danke für Ihre Hilfe! –