gpt4 book ai didi

javascript - NodeJS、mysql 和异步结果

转载 作者:行者123 更新时间:2023-11-29 22:22:39 24 4
gpt4 key购买 nike

我目前正在使用 nodeJS chop 数据库中包含 60 个表的列表。

为此,我使用以下代码:

var mysql      = require('mysql');

var connexion = mysql.createConnection({
host : '1.1.1.1',
user : 'user',
password : 'password',
database : 'db'
});
connexion.connect();
var tableList = [
'table0',
'table1',
'table2',
...
];
console.log('\n### Truncating tables... ###');
var i;
for(i = 0; i < tableList.length; i++){
connexion.query('TRUNCATE '+tableList[i]+';', function(err, rows, fields){
if(err) throw err;
console.log(i+'===> '+tableList[i]+' truncated.')
});

}

问题是输出总是:

60===> undefined truncated.
60===> undefined truncated.
60===> undefined truncated.
60===> undefined truncated.
60===> undefined truncated.
60===> undefined truncated.

我有两个问题,在回调函数中无法访问 tableList 数组,并且回调函数一直认为 i=60 是正确的值。

我做错了什么?

我想要这样的东西:

0===> table0 truncated.
1===> table1 truncated.
...

最佳答案

Classic - 异步+循环不能很好地混合。

你得到变量i。它从 0 循环到 tableList.length - 1,并在 tableList.length 处停止。对于每一个,您都启动一个带有回调的异步请求。

现在回调开始向您袭来,但 itableList.length,并且 tableList[i] 不存在。 (tableList 本身是可访问的,正在关闭;由于 i 具有循环结束后留下的任何值,因此您刚刚超出了它的末尾。)

如何解决?将循环的内容包装在 IIFE 中,传入循环计数器(或取决于循环计数器的值),这样您就不会因关闭错误的内容而受到不良影响:

for (i = ....) {
(function(i) {
...
})(i);
}

关于javascript - NodeJS、mysql 和异步结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566364/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com