2017-10-20 31 views
-1

J'ai créé une base de données sur Couch.db et j'utilise la méthode couch.GET pour extraire les données du document. J'ai créé une fonction de test qui récupère la valeur de l'objet "name" et affiche les résultats via console.log.La fonction ne renvoie pas la valeur de la propriété JSON - node.js

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

sendDB(); 

Dans la fonction ci-dessus, la sortie est «John Doe» comme il se doit. Le problème se pose quand je tente de retourner la valeur de 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()); 

Dans la fonction ci-dessus, la console lit « undefined » et je suis tout à fait confus. J'ai besoin d'utiliser la valeur retournée dans d'autres fonctions donc toute aide serait grandement appréciée. Merci

+0

Cela ne répond pas à votre question, mais vous avez un problème avec vos arguments de fonction, 'fonction (données, en-têtes , statut) Cette fonction est passée à 'then', donc elle n'aura qu'un seul argument, comme avec toute autre promesse. Cette API particulière passe un objet contenant 3 propriétés, 'data',' header' et 'status'. Certains exemples 'node-couchdb' utilisent la déstructuration, telle que' function ({data, headers, status}) ', pour séparer cet objet. Notez les accolades, qui manquent dans votre code. Si vous avez une ancienne version de Node, il se peut qu'elle ne prenne pas en charge la déstructuration. – skirtle

Répondre

1

Vous devez renvoyer la promesse de sendDB(). Actuellement, il n'y a pas return à la fonction externe.

Depuis la promesse est asynchrone, vous devez utiliser then() enchaîné à la fonction appel

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

J'ai mis l'instruction return dans la fonction externe et j'ai appelé la fonction comme vous l'avez écrit mais j'ai reçu une erreur disant 'ne peut pas lire la propriété' puis 'de non défini'. Je suis débutant donc je m'excuse si ma question est mauvaise. Merci! – sickguy125

+0

Merci, mon mauvais pour ne pas voir le retour écrit à l'extérieur de la déclaration de couch.get – sickguy125