for循环中的Javascript嵌套回调

for循环中的Javascript嵌套回调,javascript,mysql,callback,Javascript,Mysql,Callback,我有嵌套函数,它们不应该阻止I/O for(let i = 1; i < category_amount;i++){ pool.query('SELECT COUNT(1) FROM threads_mphp WHERE category = ?',i,function(error, results1, fields) { console.log(i); pool.query('UPDATE category SET pos

我有嵌套函数,它们不应该阻止I/O

 for(let i = 1; i < category_amount;i++){
        pool.query('SELECT COUNT(1) FROM threads_mphp WHERE category = ?',i,function(error, results1, fields) {
            console.log(i);
            pool.query('UPDATE category SET posts=? where category=?',[results1[0]['COUNT(1)'],i],function() {
                console.log(i);
            });
        });
    }
for(设i=1;i
两个查询都使用相同的索引i。 我不能将let用于这种目的。 console.logs没有按预期在一行中输出两个相同的数字。
我怎样才能解决这个问题?

我认为这里没有问题。回调函数(
function(error,results1,fields).
)和后续更新语句仅在
pool.query的结果完成时调用。因此,日志可能会出现无序,因为您正在生成
池。query
调用将允许您以最快的速度进入循环

pool.query
之前添加一条日志记录语句,以查看到底发生了什么。 我相信日志记录会像这样

1 query! - called from loop
2 query! - called from loop
3 query! - called from loop
1 SELECT finished! - 1st callback is invoked and UPDATE dispatched.
4 query! - loop is still running!
2 SELECT finished!
1 UPDATE finished!
3 SELECT finished!
2 UPDATE finished!
...
for(设i=1;i
这是否回答了您的问题?“我不能将let用于此类目的”:为什么不?“console.logs没有按预期连续输出两个相同的数字”:为什么会这样?当它是同步代码时,这是意料之中的,但它是异步的。很可能外部的
控制台.log
在所有内部控制台之前执行。为什么这是个问题?
for(let i = 1; i < category_amount;i++){
        console.log(`${i} query!`);
        pool.query('SELECT COUNT(1) FROM threads_mphp WHERE category = ?',i,function(error, results1, fields) {
            console.log(`${i} SELECT finished`);
            pool.query('UPDATE category SET posts=? where category=?',[results1[0]['COUNT(1)'],i],function() {
                console.log(`${i} UPDATE finished`);
            });
        });
    }