函数不返回JSON属性值 - node.js

问题描述:

我已经在Couch.db上创建了一个数据库,并且我正在使用couch.GET方法来检索文档数据。我创建了一个测试函数,它将检索“name”对象的值并通过console.log输出结果。函数不返回JSON属性值 - node.js

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

sendDB(); 

在上面的函数中,输出是'John Doe',因为它应该是。问题出现时,我尝试和返回的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()); 

值在上面的函数,控制台读取“未定义”,我很困惑。我需要在其他函数中使用返回的值,所以任何帮助将不胜感激。谢谢

+0

这不回答你的问题,但你有一个问题,您函数的参数,'功能(数据,标题,状态)'。这个函数被传递给'then',所以它只会有一个参数,就像任何其他的承诺一样。这个特定的API传递一个包含3个属性'data','header'和'status'的对象。一些'node-couchdb'示例使用解构,例如'function({data,headers,status})'来拉开这个对象。请注意代码中缺少的大括号。如果您有旧版本的节点,则可能不支持解构。 – skirtle

您需要退还sendDB()的承诺。目前,外部功能没有return

由于承诺是异步的,你需要使用then()拴在函数调用

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

我把return语句放到了外部函数中,并在你写的时候调用函数,但是我得到了一个错误,说'不能读取属性',然后是'未定义'。我是初学者,所以如果我的问题很差,我很抱歉。谢谢! – sickguy125

+0

谢谢,我不好意思看到写在couch.get语句外部的回复 – sickguy125