在数据库中的循环(for)中插入值时发出问题:插入相同的值 - 节点 js / sql

泰芬阿卡尔敦

我尝试将一些数据插入到循环内的数据库中。问题是它总是插入相同的值(第一个)。我的意思是即使我的变量的值不同(我将它显示在控制台上,这样我就可以在查询数据库以插入它之前检查一切是否正常)。

我的程序基于 Node.js。

这是我的代码示例:

var obj = JSON.parse(result.body);
global.store_urls = [];

for (let i = 0; obj.productEntities.length > i; i++){

   global.store_urls.push(obj.productEntities[i].url);
   var reference=obj.productEntities[i].IdProduct;
   var brand=obj.productEntities[i].Brand;
   var price=obj.productEntities[i].Price;
   var new_price=obj.productEntities[i].PriceNew;
   var reduction=obj.productEntities[i].sale_state;
   var type_1=obj.productEntities[i].Category;
   var sold=obj.productEntities[i].sold;

   console.log(reference+" / "+brand+" / "+price+" / "+new_price+" / "+reduction+" / "+type_1+" / "+sold);

   //Row (data) insertion part
   var sql = mysql.format("SELECT * FROM vd_tendance WHERE url=?", [obj.productEntities[i].url]);
   var selectUrl = connection.query(sql, function(err,rows,fields) {

    if(err){throw err;}
    //Checking the value exist on the table
    if(rows.length > 0){
     //If already exists, no need to insert
      console.log(rows.length);
    }else{
     //Save to database
     connection.query('INSERT INTO `vd_tendance` VALUES ( NULL , ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP())',
                  [ reference,
                    type_1,
                    brand,
                    price,
                    new_price,
                    reduction,
                    sold,
                    url,
                  ]
              , function (err, result) {
                  if (err) {console.error('error inserting into database : ' + err.stack); return;}
                  else{}
              });
            }
          });


      }

结果始终是插入到每一行的相同数据(变量采用的第一个值)。

你能给我一些解决这个问题的想法吗?也许它与异步节点js系统完全相关?

谢谢你们 !

丹尼斯·塞古雷

在调用给异步函数的回调之前,循环完全执行。

一种解决方案是将数组项捕获在闭包中,例如使用 forEach:

obj.productEntities.forEach(function(entity){
    global.store_urls.push(entity.url);
    var reference = entity.IdProduct;
    ...

另请注意,在进行查询之前仍会执行整个循环,如果后面的代码取决于正在更新的数据库,则这可能是一个问题。在这种情况下,您最好查看处理异步任务的现代解决方案:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

sql 语法 mysql 节点 js 中的错误?

来自分类Dev

节点JS MySQL-插入数据。数据库中没有行更新

来自分类Dev

转义节点js中的字符串以将其插入sqlite3数据库

来自分类Dev

MYSQL节点js插入问题

来自分类Dev

如何在节点js中处理oracle.sql.ARRAY?

来自分类Dev

在节点js中填充

来自分类Dev

节点 JS 中的 unhandledPromiseRejectionWarning

来自分类Dev

节点 js 中的 SetTimeout()

来自分类Dev

节点js无限循环

来自分类Dev

在节点js中执行for循环

来自分类Dev

节点js中的同步for循环

来自分类Dev

在SQL中操作XML节点(合并节点)

来自分类Dev

使用节点js上传文件并将表单信息存储在数据库中(mysql)

来自分类Dev

使用节点js上传文件并将表单信息存储在数据库中(mysql)

来自分类Dev

SQL,在xml变量中查找节点值(如果存在),将其他节点插入xml变量中

来自分类Dev

从子节点 openxml sql 返回相同的节点值

来自分类Dev

MS SQL中的Concat xml节点值

来自分类Dev

从节点js更新mongodb中的值

来自分类Dev

在节点js中插入带有自定义值的选择查询

来自分类Dev

节点JS同步数据库调用

来自分类Dev

节点JS异步数据库调用

来自分类Dev

节点JS同步数据库调用

来自分类Dev

当我插入数据时,它在数据库中显示为“ 1”-php,sql

来自分类Dev

节点js中的``条件地狱''

来自分类Dev

节点js中的媒体蜘蛛

来自分类Dev

节点js中的``条件地狱''

来自分类Dev

节点Js中的HTTP请求

来自分类Dev

节点js中的Flash消息

来自分类Dev

节点JS中的多重查询