我有一系列要运行的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循环,没有任何输出
答案 0 :(得分:0)
您可以改用递归:
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
也会阻止这种情况。)