我在一个循环中执行几个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();
})这段代码没有输出任何内容。
但是,如果我将循环的迭代减少到2,我将得到如下结果:
[{COUNT: 1}]
[{COUNT: 1}]为什么select工作两次,但第三次或更多次停止工作?
实际上,我需要在循环中执行选择、插入和其他操作。
发布于 2019-07-20 07:03:04
在查询语句停止执行之前调用db.detach,因为这些语句是异步调用的。我不知道为什么这两次迭代都能工作,我希望它永远不会起作用。
您可以使用异步/等待,结合按照顺序调用异步代码的承诺,如下所示:
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();
})https://stackoverflow.com/questions/57119750
复制相似问题