如何在循环中排序一堆查询?

时间:2019-07-13 13:11:51

标签: javascript mysql node.js

我有一系列要运行的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循环,没有任何输出

1 个答案:

答案 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也会阻止这种情况。)