Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript循环中调用查询_Javascript_Node.js - Fatal编程技术网

在JavaScript循环中调用查询

在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

我正在使用NodeJS。 我试图在循环中调用查询。但它并不像你想象的那样有效。 我希望它按顺序工作。但是,请求部分总是最后执行。 循环完成后,执行查询请求。但我想要的是在日志中按顺序堆叠

脚本

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