首页 > 解决方案 > 如何在循环中对一堆查询进行排序?

问题描述

我有一系列要运行的 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 循环

标签: javascriptmysqlnode.js

解决方案


您可以改用递归:

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


推荐阅读