javascript - 在nodejs中的同一连接内运行查询
问题描述
在使用代码片段中提到的空间中的第一个查询( query1 )的结果构建它之后,需要运行第二个 sql 查询(query2 ) ,第二个 sql 查询将根据第一个查询的结果生成。但是当我尝试运行它时,它会毫无问题地构建第二个查询,但它没有执行。有人可以帮助纠正这个问题。
let userNames ="'";
let query1="SELECT * FROM user WHERE userid in ('1','2','3','4')"
conn.connect().then(function(){
let req1=new sql.Request(conn);
req1.query(query1).then(function(recordset){
recordset.recordset.map((item)=>{
userNames=userNames.concat(item.user_name+"','");
})
userNames=userNames.slice(0, -2);
query2=`SELECT * FROM INVOICEMASTER WHERE username IN (${userNames})`
console.log('----------------------------------')
**//// Need to execute query2 here**
console.log('before closing the con')
conn.close();
console.log('after closing the con')
})
.catch(function(err){
console.log(err)
conn.close();
});
})
.catch(function(err){
console.log(err);
});
解决方案
Node.js 是异步的,因此每个函数调用都将单独执行,而所有其他函数调用都将执行而无需等待前面的函数。
所以当你执行时:
req1.query(query2).then((data)=>{
** process your data **
});
conn.close();
查询将在单独的线程中执行,但事件循环将继续并关闭连接。
解决方案将:
异步等待
req1.query(query1).then(async function(recordset){ recordset.recordset.map((item)=>{ userNames=userNames.concat(item.user_name+"','"); }); userNames=userNames.slice(0, -2); query2=`SELECT * FROM INVOICEMASTER WHERE username IN (${userNames})`; var query2Data = await req1.query(query2); ** process query2Data here ** conn.close(); });
在第二个查询执行回调函数中关闭 SQL 连接。
req1.query(query1).then(async function(recordset){ recordset.recordset.map((item)=>{ userNames=userNames.concat(item.user_name+"','"); }); userNames=userNames.slice(0, -2); query2=`SELECT * FROM INVOICEMASTER WHERE username IN (${userNames})`; req1.query(query2).then( function(data){ ** process query2Data here ** conn.close(); }); });
推荐阅读
- php - 如何删除字符串中两行之间的特定换行符而不删除其他换行符?php
- javascript - Nuxt 来自 api 的动态路由
- apache-kafka - 使用 localstack 测试 kafka 应用程序
- validation - wxPython 对话框:如何验证多个控件中的输入?
- javascript - primeng p-treeTableToggler 图标已更改,而不是原来的 pi pi-fw pi-chevron-right 图标
- pandas - 如何根据检查列中是否存在值的条件将行添加到 DF
- vue.js - 无法让 v-img 在 v-flex 内居中
- lua - 将字符串与函数 Lua 关联
- reactjs - 找不到所需的文件。名称:index.js
- ios - Swift 结构警告“'UnsafeMutableRawPointer' 的初始化导致指针悬空”