我有以下代码:
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
中取了示例提前致谢:)
答案 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}}
如果您不知道为什么会这样,那么您可以看到其他答案,我将解释如何从异步函数调用中获取数据,您可能会发现这些数据很有用: