javascript for循环只返回最后一个元素

时间:2018-06-11 01:44:18

标签: javascript mysql arrays for-loop foreach

为什么循环只返回最后一个值?

有人可以帮助我在body { font: normal 14px Verdana; } h1 { font-size: 24px; } h2 { font-size: 18px; } #sidebar { float: right; width: 30%; } #main { padding-right: 15px; } .infoWindow { width: 220px; }

中返回所有值
<title>MAP itinéraire </title>
<meta charset="utf-8">
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js"></script>

<body onload="init();">



  <form id="services">
    Location: <input type="text" id="start" value="Midar" /> Destination:
    <select id="destination" onchange="calculateRoute();"></select>
    <input type="button" value="clear map" onclick="toggleMarkers();" />
  </form>

  <section id="sidebar">
    <div id="directions_panel"></div>
  </section>

  <section id="main">
    <div id="map_canvas" style="width: 70%; height: 750px;"></div>
  </section>

</body>

1 个答案:

答案 0 :(得分:2)

您在每次迭代时隐式分配和重新分配全局变量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)
      })
    })
  }
})