2016-12-27 76 views
0

我是nodejs和异步语言的新手。我试图从sqlite3读取数据并将它们推入数组中。最后打印数组。 我已经成功将数据推送到数组,并且可以在迭代中记录它们。但是,当我试图从外部读取数组看起来像数组是空的。Nodejs在迭代后读取数组

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和解释,但不明白的结构和它与我的代码关系。任何人都可以帮我解决我的代码问题。 在此先感谢

回答

1

docs

数据库#每个(SQL,[参数,...],[回调],[完成])

可以拿到后arraydb.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 
}); 
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); 
    }); 

干杯