2017-10-20 2 views
-1

Ich habe eine Datenbank auf Couch.db erstellt, und ich verwende die couch.GET-Methode, um Dokumentendaten abzurufen. Ich erstellte eine Testfunktion, die den Wert des Objekts "name" abrufen und die Ergebnisse über console.log ausgeben würde.Funktion gibt JSON-Eigenschaftswert nicht zurück - node.js

function sendDB() { 
    couch.get(dbName, viewUrl).then(
     function(data, headers, status){ 
      console.log(data.data.rows[0].value.name); 
     } 
    ) 
} 

sendDB(); 

In der obigen Funktion ist der Ausgang "John Doe", wie es sein sollte. Das Problem entsteht, wenn ich versuche, und den Wert von data.data.rows[0].value.name

function sendDB() { 
    couch.get(dbName, viewUrl).then(
     function(data, headers, status){ 
      DB = JSON.stringify(data.data.rows[0].value.name); 
      return DB; 
     } 
    ) 
} 

console.log(sendDB()); 

In der obigen Funktion zurückzukehren, die Konsole ‚undefined‘, heißt es, und ich bin ganz verwirrt. Ich muss den zurückgegebenen Wert in anderen Funktionen verwenden, damit jede Hilfe sehr geschätzt wird. Danke

+0

dieser Antwort Ihrer Frage nicht angekettet verwenden, aber Sie haben ein Problem mit Ihrem Funktionsargument bekommen, 'Funktion (Daten, headers , Status) '. Diese Funktion wird an "then" übergeben, so dass es nur ein einziges Argument gibt, genau wie bei jedem anderen Versprechen. Diese spezielle API übergibt ein Objekt, das 3 Eigenschaften enthält, "data", "header" und "status". Einige 'node-couchdb'-Beispiele verwenden eine Destrukturierung wie' function ({data, headers, status}) ', um dieses Objekt auseinander zu ziehen. Beachten Sie die geschweiften Klammern, die in Ihrem Code fehlen. Wenn Sie eine alte Version von Node haben, unterstützt sie möglicherweise keine Destrukturierung. – skirtle

Antwort

1

Sie müssen das Versprechen von sendDB() zurückgeben. Derzeit gibt es keine return zur äußeren Funktion.

Da das Versprechen asynchron ist, müssen Sie then() zum Funktionsaufruf

function sendDB() { 
    // return the promise 
    return couch.get(dbName, viewUrl).then(
     function(data, headers, status){ 
      DB = JSON.stringify(data.data.rows[0].value.name); 
      return DB; 
     } 
    ) 
} 
sendDB().then(function(DB){ 
    console.log(DB); 
}); 
+0

Ich habe die return-Anweisung in die äußere Funktion geschrieben und die Funktion so aufgerufen, wie Sie geschrieben haben, aber ich habe einen Fehler bekommen, der besagt: 'kann Eigenschaft nicht lesen' und dann 'von undefiniert'. Ich bin ein Anfänger, also entschuldige ich mich, wenn meine Frage schlecht ist. Vielen Dank! – sickguy125

+0

Vielen Dank, mein schlechtes für die Rückkehr nicht auf der Außenseite der Couch geschrieben – sickguy125