Nodejs在迭代后读取数组

时间:2016-12-27 05:56:28

标签: javascript arrays node.js sqlite

我是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的例子和解释,但是不了解结构及其与我的代码的关系。任何人都可以帮我解决我的代码问题。 提前致谢

2 个答案:

答案 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);
  });

干杯