在JavaScript循环中调用查询
我正在使用NodeJS。 我试图在循环中调用查询。但它并不像你想象的那样有效。 我希望它按顺序工作。但是,请求部分总是最后执行。 循环完成后,执行查询请求。但我想要的是在日志中按顺序堆叠 脚本在JavaScript循环中调用查询,javascript,node.js,Javascript,Node.js,我正在使用NodeJS。 我试图在循环中调用查询。但它并不像你想象的那样有效。 我希望它按顺序工作。但是,请求部分总是最后执行。 循环完成后,执行查询请求。但我想要的是在日志中按顺序堆叠 脚本 try { console.log('updateData'); mssql.connect(config, function(err) { console.log('Connect'); var request = new mssql.Request(); console
try {
console.log('updateData');
mssql.connect(config, function(err) {
console.log('Connect');
var request = new mssql.Request();
console.log(JSON.parse(req.body.data));
var updateObj = JSON.parse(req.body.data);
console.log(updateObj.length);
var queryString = "";
console.log('updateObj :', updateObj);
for (i = 0; i < updateObj.length; i++) {
var selectQueryString = "SELECT * FROM tBM WHERE BM_i = " + updateObj[i].c_BM_IDs;
console.log("Query : " + selectQueryString);
console.log('loop I :', i);
request.query(selectQueryString, function(err, recordset) {
console.log("BM_i : " + recordset.recordset[0].BM_i);
//request I is Last value of loop I +1
console.log('request I :', i);
//org up, org lo is error
console.log("org up : " + updateObj[i].orgUpIDs);
console.log("org lo : " + updateObj[i].orgLoIDs);
});
}
});
} catch (err) {
console.log(err)
}
但是我想要下面这样的结果
像这样
if updateObj.length = 4
Query : SELECT * FROM tBM WHERE BM_i = data
loop I : 0
BM_i : data
i : 0
Query : SELECT * FROM tBM WHERE BM_i = data
loop I : 1
BM_i : data
i : 1
Query : SELECT * FROM tBM WHERE BM_i = data
loop I : 2
BM_i : data
i : 2
Query : SELECT * FROM tBM WHERE BM_i = data
loop I : 3
BM_i : data
i : 3
我如何实现它
感谢您的回答查询是异步的。@Barmar我想同步处理查询。您需要在上一个查询的回调函数中启动下一个查询,而不是使用循环。。然后您可以等待它。尽管如此,在循环中向数据库发出请求有点可疑。为什么不创建一个一次获取所有数据的查询呢?然后,您可以在内存中迭代一次结果集。或者使用
async/await
。
if updateObj.length = 4
Query : SELECT * FROM tBM WHERE BM_i = data
loop I : 0
BM_i : data
i : 0
Query : SELECT * FROM tBM WHERE BM_i = data
loop I : 1
BM_i : data
i : 1
Query : SELECT * FROM tBM WHERE BM_i = data
loop I : 2
BM_i : data
i : 2
Query : SELECT * FROM tBM WHERE BM_i = data
loop I : 3
BM_i : data
i : 3