2017-10-20 56 views
-1

我已經在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

回答

1

您需要退還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