javascript - 如何在循环中对一堆查询进行排序?
问题描述
我有一系列要运行的 MySQL 查询,我将它们保存在一个数组中。但是当我使用循环执行这些命令时,这些命令只会在整个循环结束后运行。
var i = 0;
while(i<tableCommands.length)
{
connection.query(tableCommands[i],function(err,result)
{
if (err)
{
throw err;
process.exit(1);
}
console.log("table no "+i+" has been created");
i++;
})
}
我希望输出是“已创建 1 号表”等等,但我陷入了一个没有输出的 while 循环
解决方案
您可以改用递归:
function query (index) {
connection.query(tableCommands[index] function () {
...
if (++index < tableCommands.length) {
query(index);
}
});
}
这将一次运行一个查询,如果您想并行运行它们,您可以执行以下操作:
function query (index) {
connection.query(tableCommands[index] function () {
...
});
}
for (let i = 0; i < tableCommands.length; i++) {
query(i);
}
i
这将在每次迭代后而不是在对查询的响应后递增。它还会创建一个闭包,因此i
不会以与用于查询的值不同的值结束(let
也将阻止这种情况)。
推荐阅读
- python-3.x - Python3 trouble with classes, passing variables
- qt - 将信号数据从 QMainwindow 发送到 QDialog
- arrays - 有没有办法在索引和匹配函数中使用多个数组?
- c - 如何将一个 TCP 服务器连接到另一个 TCP 服务器
- c# - 我的第二个游戏对象正在处理背景
- c - 如何使用函数扫描二维数组而不删除其内容
- javascript - POST 超时;获取响应待处理
- c# - 从 ValueConverter 访问条目
- hyperledger-fabric - 使用 SDK 在 Fabric 中注册用户时出错
- javascript - 创建 FormData 不包括未提供的输入文件