我是nodejs和异步语言的新手。我试图从sqlite3读取数据并将它们推入数组中。最后打印阵列。 我已成功将数据推送到数组,我可以从迭代内部记录它们。但是当我尝试从外部读取数组时,看起来数组是空的。
var express = require('express');
var app = express();
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('testDb');
app.use(express.static(__dirname + '/public'));
db.serialize(function() {
var infoCOllection = [];
db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
infoCOllection.push(row.id + ": " + row.info);
});
console.log(infoCOllection);
});
db.close();
app.listen(3000);
console.log('sever is run on port 3000');
我阅读了很多关于回调和nodejs的例子和解释,但是不了解结构及其与我的代码的关系。任何人都可以帮我解决我的代码问题。 提前致谢
答案 0 :(得分:1)
来自docs
数据库#the each(sql,[param,...],[callback],[complete])
完成array
后,您可以获得db.each
db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
infoCOllection.push(row.id + ": " + row.info);
}, function(err, rows){ //callback for completion of .each method
console.log(infoCOllection); //you can have your array printed here
});
答案 1 :(得分:0)
非常感谢Jyothi的回答和链接。现在每件事都清楚了。 :)我刚尝试了另一种检索所有行的方法:
db.all("SELECT rowid AS id, info FROM lorem",function(err, rows) {
rows.forEach(function(row) {
infoCOllection.push(row.id + ": " + row.info);
});
console.log(infoCOllection);
});
干杯