变量在node.js的有效性与sqlite3
Validity of variable in node.js with sqlite3
我在node.js中对sqlite3执行select语句。我想有变量"数据"的结果,这是在sqlite代码块之外定义的,但它保持空。在sqlite代码块中,数据变量具有正确的值。有人知道我哪里做错了吗?
谢谢。
/* Client connects via socket.io */
io.on('connection', function(client) {
console.log('Client connected');
/* Client needs data... */
client.on('needData', function(fields) {
var data = [];
var sql_stmt = "SELECT ...";
if(fs.existsSync(db_file)) {
try {
var db = new sqlite3.Database(db_file);
db.all(sql_stmt, function(err, all) {
data = all;
console.log(data); //--> data has valid values
});
db.close();
console.log(data); //--> data is empty
}
catch(e) {
console.log("Error with database. Error: ", e);
}
}
else {
console.log("Database file not found.");
}
client.emit('data', data);
});
});
这是因为Node.js
的asynchronous
性质你可以用promises
来处理
我建议使用瀑布方法异步模块
var async=require('async');
/* Client connects via socket.io */
io.on('connection', function(client) {
console.log('Client connected');
/* Client needs data... */
client.on('needData', function(fields) {
async.waterfall([function(next) {
var sql_stmt = "SELECT ...";
if (fs.existsSync(db_file)) {
try {
var db = new sqlite3.Database(db_file);
db.all(sql_stmt, function(err, all) {
next(null,all)
});
db.close();
} catch (e) {
console.log("Error with database. Error: ", e);
next();
}
} else {
console.log("Database file not found.");
next();
}
}], function(err, data) {
if (!err) {
client.emit('data', data);
}
})
});
});
相关文章:
- 有效性弹出窗口获胜't输入正确后仍保持平稳
- 如何从javascript访问sqlite3数据库表值
- 为SQLite3生成JavaScriptSQL解析器(使用Lemon?ANTLR3?)
- 用Javascript打开外部sqlite3数据库
- AngularJS Watch输入有效性指令
- 如何检查地址有效性
- CSS背景颜色有效性
- php文件上传返回文件和文件路径的有效性
- 检查有效性以更新 UI
- Node.js and SQLite3
- 使用量角器测试页面上所有链接的有效性
- 如何在只读输入字段上设置自定义有效性
- Opera 12 的输入类型=数字有效性行为的任何解决方法
- AngularJS表单,检查有效性
- 当表单与jQuery插件混淆时,如何检查表单的有效性
- 使用 Angular ng-repeat 的表单有效性
- JavaScript 类型参数的有效性
- 使用 SQLite3 + Node.js 的最佳实践
- 我的节点.js https 客户端始终工作,无论证书有效性如何
- 变量在node.js的有效性与sqlite3