我需要调出具有行级功能的运行sql查询的函数,并等待整个过程再继续。
功能代码:
const sql = require('mssql')
exports.doit = ()=>{
const pool1 = new sql.ConnectionPool(dbConfig);
const pool1Connect = pool1.connect();
pool1.on('error',err => {
console.error('error occurred on pool')
})
await pool1Connect
try {
const request = pool1.request();
request.stream = true;
request.query('select * from dbo.user');
request.on('row',async orow => {
console.log('outer row');
const innerPool = new sql.ConnectionPool(dbConfig);
const innerConnection = innerPool.connect();
innerPool.on('error',err => {
console.error('error occurred on pool')
});
const iConnection = await innerConnection;
connections.push(iConnection);
const innerRequest = innerPool.request();
innerRequest.stream = true;
var iquery = 'select * from dbo.order where userId='+ orow.userId
innerRequest.query(iquery);
innerRequest.on('row',async irow => {
console.log(`User: ${orow.userId} Order: ${irow.orderId}`);
});
innerRequest.on('done',async () => {
console.log('inner done');
iConnection.close();
});
});
request.on('done',async () => {
console.log('outer done');
})
} catch (err) {
console.error('SQL error',err);
}
sql.on('error',err => {
// ... error handler
})
}
然后像这样调用上面的函数:
var doit = require('./testmeHandler.js').doit;
doit()
.then(()=>{
console.log("I AM DONE");
});
OR
await doit();
console.log('I AM DONE');
您明白了...
但是真正发生的是,先调用该函数,然后调用“ I AM DONE”,然后调用所有sql的结果。
有人可以帮助我在底部显示“我已完成”吗?仍然习惯了异步/等待和诺言。
谢谢