为什么循环只返回最后一个值?
有人可以帮我获取SQL插入
中返回的所有值
tableau.forEach(function(obj) {
for(let i = 0; i < obj.produits.length; i++) {
let bd_nom = obj.produits[ii].nom
let bd_description = obj.produits[ii].description
let bd_titre = obj.titre
records = [[bd_nom, bd_description, bd_titre]]
con.connect(function(err) {
let sql = "INSERT INTO scrapeded (nom, text, titre) VALUES ?";
con.query(sql, [records], function (err, result) {
console.log(result)
console.log("Nombre de rangée affectée : " + result.affectedRows)
console.log("Nombre d'enregistrement affectée avec avertissement : " + result.warningCount)
console.log("Message du serveur mySQL : " + result.message)
})
})
}
})
最佳答案
您在每次迭代中隐式分配和重新分配给全局变量records
。因此,当异步查询开始时,主线程已结束,records
仍保留为其分配的最后一个值。
使用 const
声明它,以确保每次迭代都有一个新的绑定(bind)。
此外,无需声明一个数组,然后立即对其进行解构以选择第一个元素 - 相反,只需将 records
声明为包含两个项目的一维数组即可:
tableau.forEach(function(obj) {
for(let i = 0; i < obj.produits.length; i++) {
let bd_nom = obj.produits[ii].nom
let bd_description = obj.produits[ii].description
let bd_titre = obj.titre
const records = [bd_nom, bd_description, bd_titre]
con.connect(function(err) {
let sql = "INSERT INTO scrapeded (nom, text, titre) VALUES ?";
con.query(sql, records, function (err, result) {
console.log(result)
console.log("Nombre de rangée affectée : " + result.affectedRows)
console.log("Nombre d'enregistrement affectée avec avertissement : " + result.warningCount)
console.log("Message du serveur mySQL : " + result.message)
})
})
}
})
关于javascript for 循环只返回最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50789562/