我想要实现的是,将表单元格中的文本值插入到 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 只有0
and 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] 删除。
我来说两句