Javascript 循环中的查询在节点firebird中不起作用
我在一个循环中执行几个select查询 简化复制示例,我得到以下代码:Javascript 循环中的查询在节点firebird中不起作用,javascript,node.js,firebird,Javascript,Node.js,Firebird,我在一个循环中执行几个select查询 简化复制示例,我得到以下代码: var Firebird = require('node-firebird'); Firebird.attach({database: 'TEST'}, (err, db) => { for (var i = 0; i < 3; i++) { db.query('select count(0) from rdb$database', (err, result) => { conso
var Firebird = require('node-firebird');
Firebird.attach({database: 'TEST'}, (err, db) => {
for (var i = 0; i < 3; i++) {
db.query('select count(0) from rdb$database', (err, result) => {
console.log(result);
//db.detach();
})
}
db.detach();
})
为什么select工作两次,但第三次和更多次停止工作
实际上,我需要在循环中执行select、insert和其他操作。
db.detach在查询语句停止执行之前被调用,因为它们是异步调用的。我不知道为什么这两次迭代都能成功,我希望它永远不会成功
您可以使用async/await,结合承诺按顺序调用异步代码,如下所示:
var Firebird = require('node-firebird');
Firebird.attach({database: 'TEST'}, async (err, db) => {
for (var i = 0; i < 3; i++) {
await new Promise(resolve => {
db.query('select count(0) from rdb$database', (err, result) => {
console.log(result);
resolve();
});
});
}
db.detach();
})
var Firebird=require('node-Firebird');
附加({database:'TEST'},异步(err,db)=>{
对于(变量i=0;i<3;i++){
等待新的承诺(解决=>{
db.query('select count(0)from rdb$database',(err,result)=>{
控制台日志(结果);
解决();
});
});
}
db.detach();
})
db.detach
在查询语句停止执行之前被调用,因为这些语句是异步调用的。为什么这需要两次迭代,我不知道,我希望它永远不会工作。谢谢,它工作了!但这并不能解释为什么在注释db.detch()之后,select仍然不起作用。。。据我所知,我应该只在async/await或嵌套回调中使用db.query()。