【问题标题】:Store database attribute in var将数据库属性存储在 var 中
【发布时间】:2017-02-07 17:27:25
【问题描述】:

我有以下代码:

var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('test.db');

db.serialize(function() {
    db.run("CREATE TABLE IF NOT EXISTS counts (key TEXT, value INTEGER)");
    db.run("INSERT INTO counts (key, value) VALUES (?, ?)", "counter", 0);
});


var getValue = function(res){
    db.get("SELECT value FROM counts", function(err, row){
        res.json({ "count" : row.value });
        return;
    });
};

console.log(getValue);

输出是

[Function]

但应该是json。我究竟做错了什么? 我以http://dalelane.co.uk/blog/?p=3152

为例

提前致谢:)

【问题讨论】:

  • 我下面的帖子回答了你的问题吗?如果不是,请发表评论,我会尽力澄清。
  • 哦,是的,它确实回答了我的问题。我仍然没有掌握它,但我会到达那里。我在 python 中解决了这个问题(这是一个练习),并计划在我超出最后期限后阅读更多内容;-)

标签: node.js sqlite callback


【解决方案1】:

当然getValue 是一个函数,因为在你写之前的几行代码:

var getValue = function(res){
   // ...
};

现在,当你写的时候:

console.log(getValue);

它告诉你它是一个函数。

你可能想要的是:

getValue({json: console.log});

或者也许:

getValue({json: data => console.log(data.count)});

如果您想显示传递给 res.json 的对象中的值,如果您有一个 db.get() 函数以该格式返回一行 - 请确保您正在使用它首先是正确的。但请记住,这是异步的,因此您无法立即将其存储在变量中。

稍微简化一下你的例子,你可以这样做:

asyncFunc('args', function (err, data) {
  if (err) {
    console.log('Error:', err);
  } else {
    console.log('Value:', data);
  }
});

但您将无法返回该值,因为返回简单值是一个同步过程。你能回报的是一个承诺:

function getPromise() {
  return new Promise(function (resolve, reject) {
    asyncFunc('args', function (err, data) {
      if (err) {
        reject(err);
      } else {
        resolve(data);
      }
    });
  });
}

你可以像这样使用:

getPromise()
  .then(value => console.log('Value:', value))
  .catch(error => console.log('Error:', error));

如果您不知道为什么会这样,那么您可以看到一些其他答案,其中我解释了如何从异步函数调用中获取数据,您可能会觉得这很有帮助:

【讨论】:

    【解决方案2】:

    您没有调用 getValue 函数。像这样称呼它:getValue()。但该函数返回 null。

    您需要从一个更基本的示例开始。首先了解函数调用,然后当你了解了函数调用之后再继续做其他事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多