[英]Row results from Tedious Request.on not being saved
我的 nodeJS 应用程序中有一个 function queryDatabase() ,它负责查询 Azure SQL DB 并返回 Tious 结果。
目前,为了返回从数据库中检索到的数据,我正在遍历查询返回的行,将数据保存到一个 var(一个字典数组,实际上是 JSON),然后返回它。 但是,我遇到了一个问题,即在将任何内容分配给它之前返回 var(空)。
我很确定这与调用 return 后执行的 request.on() 中的回调函数有关,但是我对 JS 的这一面有点缺乏经验,并且对在线文档没有太多的运气/教程。
function queryDatabase(){
console.log("Reading rows from the Table...");
// Read all rows from table
const request = new Request(
`select TOP 5 level, city, address from [dbo].[mainTable];`,
(err, rowCount) => {
if (err) {
console.error(err.message);
}
}
);
var result = [];
request.on("row", (columns) => {
var entry = {};
columns.forEach((column) => {
entry[column.metadata.colName] = column.value;
});
result.push(entry);
});
connection.execSql(request);
return result;
}
任何帮助将不胜感激,干杯!
Request
是一个事件发射器,所以它就是等待你关心的所有事件发生,然后返回结果。 这就是Promise的用途。 promise 是一个异步操作,将在未来某个日期解决。 您需要等待所有row
事件被发出,收集它们,然后等待done
事件,并解决 promise。 我已经修改了您的代码以实现此目的,并显示了使用示例。
function queryDatabase(){
console.log("Reading rows from the Table...");
// Read all rows from table
const request = new Request(
`select TOP 5 level, city, address from [dbo].[mainTable];`,
(err, rowCount) => {
if (err) {
console.error(err.message);
}
}
);
return new Promise((resolve,reject)=>{
const result = [];
request.on("row", (columns) => {
const entry = {};
columns.forEach((column) => {
entry[column.metadata.colName] = column.value;
});
result.push(entry);
});
request.on('error',error=>reject(error));// some error happened, reject the promise
request.on('done',()=>resolve(result)); // resolve the promise with the result rows.
connection.execSql(request);
});
}
用法如下图:
queryDatabase().then(rows=>{
// do something with the rows
})
.catch(error=>{
// do something with the error
})
@r3wt 答案是正确的,但这个对我有用:
request.on("doneProc", () => resolve(result));
代替
request.on('done',()=>resolve(result));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.