使用多个循环的mysql在Node.js中进行查询
我正在尝试通过for进行几个查询。 requestFast (i)
函数尝试进行与列表大小一样多的更新。执行它时,错误显示为“调用quit后无法使查询入队”,但最后关闭了连接。
const database = new Database();
let person = [];
database.query(queryGet)
.then(rows => {
for (i in rows) {
person[i] = new Person(rows[i].name, rows[i].lastName, rows[i].age);
}
for (i = 0; i < uuidUploads.length; i++) {
request(i);
}
database.close();
}).catch(error => console.log(error));
回答如下:request(i)几乎肯定会返回一个承诺。发生的事情是您正在遍历request(i),但实际上并未执行“ request”功能,而是将其添加到事件循环中。因此,正在发生的事情是您当前的函数正在完成,包括database.close()命令,然后从事件循环中调用request(i)函数。
我建议重构您的代码以使用异步/等待模式,以使其更易于阅读和排除故障。
async function databaseQueryHandler() {
const database = new Database();
let person = [];
let rows = await database.query(queryGet)
try {
for (let i in rows) { // make sure to declare your variables or you are going to have a bad time (add let)
person[i] = new Person(rows[i].name, rows[i].lastName, rows[i].age);
}
for (let i = 0; i < uuidUploads.length; i++) { // not sure where uuidUploads comes from
await request(i); // not sure you want to be passing in i here...
}
database.close();
} catch (e) {
console.log(e)
}
}