Javascript 循环中的查询在节点firebird中不起作用

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

我在一个循环中执行几个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) => {
      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()。