在var中存储数据库属性

时间:2016-09-29 11:45:48

标签: node.js sqlite callback

我有以下代码:

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

中取了示例

提前致谢:)

2 个答案:

答案 0 :(得分:0)

你没有调用 getValue函数。这样称呼:it("validates something",()=>{ //... browser.wait(apiCall(),timeout).then(json => { //do stuff with json }); // Continue with your test } 。但是该函数返回null。

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

答案 1 :(得分:0)

当然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));

然后您可以这样使用:

{{1}}

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