JavaScript для цикла возвращают только последний элемент - PullRequest
0 голосов
/ 11 июня 2018

Почему цикл возвращает только последнее значение?

Может ли кто-нибудь помочь мне получить все значения, возвращаемые в SQL insert

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)
            })
         })
      }
  })

1 Ответ

0 голосов
/ 11 июня 2018

Вы неявно присваиваете и переназначаете глобальную переменную records на каждой итерации.Таким образом, к моменту запуска асинхронного запроса основной поток завершается, и records остается последним присвоенным ему значением.

Вместо этого объявите его с помощью const, чтобы обеспечить наличие новой привязки для каждогоитерация.

Кроме того, нет необходимости объявлять массив, а затем немедленно деструктурировать его, чтобы выбрать первый элемент - вместо этого просто объявите 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)
      })
    })
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...