【问题标题】:function not returning JSON property value - node.js函数不返回 JSON 属性值 - node.js
【发布时间】:2017-10-21 05:35:28
【问题描述】:

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

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());

在上面的函数中,控制台读取'undefined',我很困惑。我需要在其他函数中使用返回值,因此将不胜感激任何帮助。谢谢

【问题讨论】:

  • 这不能回答您的问题,但您的函数参数有问题,function(data, headers, status)。该函数被传递给then,因此它只有一个参数,就像任何其他承诺一样。这个特定的 API 传递一个包含 3 个属性的对象,dataheaderstatus。一些node-couchdb 示例使用解构,例如function({data, headers, status}),将对象拉开。请注意代码中缺少的大括号。如果你有旧版本的 Node,它可能不支持解构。

标签: javascript node.js asynchronous promise


【解决方案1】:

您需要返回来自sendDB() 的承诺。目前外部函数没有return

由于promise是异步的,你需要使用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);
});

【讨论】:

  • 我将 return 语句放入外部函数并按照您编写的方法调用该函数,但我收到一条错误消息,提示“无法读取未定义的属性 'then'”。我是初学者,所以如果我的问题很糟糕,我深表歉意。谢谢!
  • 谢谢你,我很遗憾没有看到写在 couch.get 声明外面的回报
猜你喜欢
  • 2016-08-08
  • 2016-08-14
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-06
  • 2016-01-03
  • 2020-09-12
  • 1970-01-01
相关资源
最近更新 更多