javascript 代码跳过一些行执行

格诺雷多

我想要实现的是,将表单元格中的文本值插入到 2 个不同的 sql 表中。如果我评论另一个,它们就会起作用。但是,如果我想使用上面的代码,它完全缺少第一个循环,其中 y === 0 和第二个 sql 将所有值都接收为未定义,但我可以在 sql.connect 行之前将它们打印得很好。

这是我的代码

function update() {
  $('body').on('click', '#btnSave', function() {
    values = []
    $('input.form-control').each(function() {
      var valueNew = $(this).val();
      $(this).attr('disabled', true);
      values.push(valueNew);
    })

    for (var y = 0; y < 2; y++) {
      if (y === 0) {
        console.log(y)
        sql.close()
        sql.connect(config, err => {
          const request = new sql.Request()
          let editorTexts = $('#summernote').summernote()[0].value;
          console.log(editorTexts)
          request.query(`INSERT INTO table (col1, col2, col3) VALUES ('${values[1]}', '${values[0]}', '${editorTexts}')`)
          request.on('recordset', columns => {})
          request.on('row', row => {})
          request.on('error', err => {})
          request.on('done', result => {
            console.log(result.rowsAffected)
          })
        })
      } else {
        var table = $("#table tbody");
        for (var x = 0; x < table[0].rows.length; x++) {
          sql.close()
          sql.connect(config, err => {
            const request = new sql.Request()
            request.query(`INSERT INTO table2 (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14) VALUES ('${values[1]}', '${values[0]}', '${values[3 + (x*10)]}', '${values[4 + (x*10)]}', '${values[5 + (x*10)]}', '${values[6 + (x*10)]}', '${values[7 + (x*10)]}' ,'${values[8 + (x*10)]}','${values[9 + (x*10)]}', '${values[10 + (x*10)]}', '${values[2]}', '${values[11 + (x*10)]}', '${values[12 + (x*10)]}', '${+lastID[0]+1}')`)
            request.on('recordset', columns => {})
            request.on('row', row => {})
            request.on('error', err => {})
            request.on('done', result => {
              console.log(result.rowsAffected)
            })
          })
        }
      }
    }
  })
}
嘉萨克

不,代码仍在运行,但以异步方式运行。异步代码采用主程序流程之外的语句,允许异步调用后的代码立即执行而无需等待。

因为 sql 函数是异步的,所以你在第一个循环完成之前关闭了连接。比如 when y === 1,插入的过程y === 0还在运行,你关闭了,所以事务被取消了。 最好多了解一下异步、回调、promise 的工作原理

我不知道你的 sql 客户端是否支持池化。但是,您应该删除该行sql.close()所有交易完成后关闭一次。

但是,我关心的是,如果 y 只有0and 1,为什么要循环执行?如果你像这样一步一步地做会更好:

function update() {
  $('body').on('click', '#btnSave', function() {
    values = []
    $('input.form-control').each(function() {
      var valueNew = $(this).val();
      $(this).attr('disabled', true);
      values.push(valueNew);
    })

    // y === 0
    sql.connect(config, err => {
      const request = new sql.Request()
      let editorTexts = $('#summernote').summernote()[0].value;
      console.log(editorTexts)
      request.query(`INSERT INTO table (col1, col2, col3) VALUES ('${values[1]}', '${values[0]}', '${editorTexts}')`)
      request.on('recordset', columns => {})
      request.on('row', row => {})
      request.on('error', err => {})
      request.on('done', result => {

         // y === 1
         var table = $("#table tbody");
          for (var x = 0; x < table[0].rows.length; x++) {
            sql.connect(config, err => {
              const request = new sql.Request()
              request.query(`INSERT INTO table2 (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14) VALUES ('${values[1]}', '${values[0]}', '${values[3 + (x*10)]}', '${values[4 + (x*10)]}', '${values[5 + (x*10)]}', '${values[6 + (x*10)]}', '${values[7 + (x*10)]}' ,'${values[8 + (x*10)]}','${values[9 + (x*10)]}', '${values[10 + (x*10)]}', '${values[2]}', '${values[11 + (x*10)]}', '${values[12 + (x*10)]}', '${+lastID[0]+1}')`)
              request.on('recordset', columns => {})
              request.on('row', row => {})
              request.on('error', err => {})
              request.on('done', result => {
                console.log(result.rowsAffected)
              })
            })
          }
        })
      })
    }
  })
}

如果你知道如何使用Promise,最好用 Promise 包装异步任务。它在代码中更安全、更干净,如下所示:

    function insertTable(values) {
      return sql.connect(config)
        .then((pool) => {
          const editorTexts = $('#summernote').summernote()[0].value

          return pool.request().query(`INSERT INTO table (col1, col2, col3) VALUES ('${values[1]}', '${values[0]}', '${editorTexts}')`)
        })
    }

    function insertTable1(x, values) {
      return sql.connect(config)
        .then((pool) => {
          return pool.request().query(`INSERT INTO table2 (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14) VALUES ('${values[1]}', '${values[0]}', '${values[3 + (x*10)]}', '${values[4 + (x*10)]}', '${values[5 + (x*10)]}', '${values[6 + (x*10)]}', '${values[7 + (x*10)]}' ,'${values[8 + (x*10)]}','${values[9 + (x*10)]}', '${values[10 + (x*10)]}', '${values[2]}', '${values[11 + (x*10)]}', '${values[12 + (x*10)]}', '${+lastID[0]+1}')`)
      })
        })
    }

    function update() {
      $('body').on('click', '#btnSave', function() {
        const values = []
        $('input.form-control').each(function() {
          var valueNew = $(this).val();
          $(this).attr('disabled', true);
          values.push(valueNew);
        })

        // y === 0
        insertTable(values)
          .then(() => {
            // y === 1
            const table = $("#table tbody");
            const tasks = []
              for (var x = 0; x < table[0].rows.length; x++) {
                tasks.push(insertTable1(x, values));
              }

              return Promise.all(tasks);
          }).then((results) => {
            console.log("Inserted successfully");
          }).catch((err) => {
            console.error(err);
          });
      })
    }

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

清理一些荒谬的JavaScript代码

来自分类Dev

了解一些Javascript代码

来自分类Dev

javascript在执行函数后做一些事情

来自分类Dev

javascript新手想压缩一些代码

来自分类Dev

Javascript:如何迭代对象[键:值]但跳过一些键([最快的方法])

来自分类Dev

就像在通过JavaScript等方式在输入中输入一些数据一样,如何执行PHP代码并获得结果?

来自分类Dev

在Django代码中添加html文件,css文件,一些javascript文件和一些图像?

来自分类Dev

在Struts操作执行一些计算后执行javascript函数

来自分类Dev

跳过一些代码并退出程序

来自分类Dev

休眠并跳过一些行

来自分类Dev

mysql选择而跳过一些行

来自分类Dev

从行中跳过一些文本

来自分类Dev

在JavaScript中如何强制函数在返回一些数据之前完成执行

来自分类Dev

在收到的WooCommerce订单的HEAD中包含一些JavaScript代码

来自分类Dev

如何在网格顶部添加一些JavaScript代码以在后台工作

来自分类Dev

需要学习一些JavaScript代码!你能帮我吗?

来自分类Dev

测试一些基本的 javascript 代码时出现意外输出

来自分类Dev

边缘未加载一些JavaScript

来自分类Dev

得到一些选定的选项JavaScript

来自分类Dev

使用JavaScript订购一些日期

来自分类Dev

替换javascript中的一些数字

来自分类Dev

Javascript 中的一些奇怪的东西

来自分类Dev

Javascript 从 replaceWith 返回一些东西

来自分类Dev

在其他行之前运行一些 javascript 行

来自分类Dev

当用户从另一个标签退出Google时,如何执行一些JavaScript?

来自分类Dev

PHP代码跳过一些HTML内容

来自分类Dev

For 循环似乎跳过了一些代码

来自分类Dev

在检查javascript数组中的重复值并忽略其中一些重复值时,我的代码存在问题

来自分类Dev

Webpack:即使源文件为空,编译文件中也有一些 JavaScript 代码

Related 相关文章

  1. 1

    清理一些荒谬的JavaScript代码

  2. 2

    了解一些Javascript代码

  3. 3

    javascript在执行函数后做一些事情

  4. 4

    javascript新手想压缩一些代码

  5. 5

    Javascript:如何迭代对象[键:值]但跳过一些键([最快的方法])

  6. 6

    就像在通过JavaScript等方式在输入中输入一些数据一样,如何执行PHP代码并获得结果?

  7. 7

    在Django代码中添加html文件,css文件,一些javascript文件和一些图像?

  8. 8

    在Struts操作执行一些计算后执行javascript函数

  9. 9

    跳过一些代码并退出程序

  10. 10

    休眠并跳过一些行

  11. 11

    mysql选择而跳过一些行

  12. 12

    从行中跳过一些文本

  13. 13

    在JavaScript中如何强制函数在返回一些数据之前完成执行

  14. 14

    在收到的WooCommerce订单的HEAD中包含一些JavaScript代码

  15. 15

    如何在网格顶部添加一些JavaScript代码以在后台工作

  16. 16

    需要学习一些JavaScript代码!你能帮我吗?

  17. 17

    测试一些基本的 javascript 代码时出现意外输出

  18. 18

    边缘未加载一些JavaScript

  19. 19

    得到一些选定的选项JavaScript

  20. 20

    使用JavaScript订购一些日期

  21. 21

    替换javascript中的一些数字

  22. 22

    Javascript 中的一些奇怪的东西

  23. 23

    Javascript 从 replaceWith 返回一些东西

  24. 24

    在其他行之前运行一些 javascript 行

  25. 25

    当用户从另一个标签退出Google时,如何执行一些JavaScript?

  26. 26

    PHP代码跳过一些HTML内容

  27. 27

    For 循环似乎跳过了一些代码

  28. 28

    在检查javascript数组中的重复值并忽略其中一些重复值时,我的代码存在问题

  29. 29

    Webpack:即使源文件为空,编译文件中也有一些 JavaScript 代码

热门标签

归档