javascript - Node js,Javascript:为什么函数返回值未定义?
问题描述
我不知道这个问题。我试图找到一些东西,但仍然不知道..这是我的代码
function part1(sql, controltime, headers_view, results_view, tmp){
var timerName = "QueryTime";
var request = new Request(sql, function(err) {
if (err) {
console.log(err);
}
});
request.on('doneProc', function(rowCount, more, rows) {
if(!more){
console.timeEnd(timerName);
}
});
var result = "";
var header = "";
request.on('row', function(columns) {
headers_view = '\n'
results_view += '\n'
columns.forEach(function(column) {
if (column.value === null) {
result = '0';
} else {
header = column.metadata.colName;
result = column.value;
}
headers_view += header + ',';
results_view += result + ',';
});
headers_view = headers_view.replace(',\n','\n').slice(0,-1);
results_view = results_view.replace(',\n','\n').slice(0,-1);
tmp = controltime;
});
console.log(request)
return {headers_view:headers_view, results_view:results_view, tmp:tmp, request:request};
}
上面的 console.log(request) 结果是
Request {
_events: [Object: null prototype] { doneProc: [Function], row: [Function] },
_eventsCount: 2,
_maxListeners: undefined,
sqlTextOrProcedure: " SELECT [Head],round([Avg],2) as 'Class_Top' FROM [Class1].[dbo].[Class1_Control] WHERE DateTime='2020-07-26 12:30:32' ",
parameters: [],
parametersByName: {},
originalParameters: [],
preparing: false,
canceled: false,
paused: false,
userCallback: [Function],
handle: undefined,
error: undefined,
connection: undefined,
timeout: undefined,
rows: undefined,
rst: undefined,
rowCount: undefined,
callback: [Function],
[Symbol(kCapture)]: false
}
这个结果就是我想要的。但问题是
async function exec1(sql, controltime) {
part1(sql, controltime, headers_view1, results_view1, tmp1);
var headers_view1 = part1.headers_view;
var results_view1 = part1.results_view;
var tmp1 = part1.tmp;
var request = part1.request;
console.log('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&');
console.log(part1.request);
console.log('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&');
console.log('====================================')
console.log(request)
console.log('====================================')
//console.time(timerName);
const query = await Promise.all([
dbconn1.execSql(request)
]);
}
以上两个 console.log(request) & (part1.request) 都是未定义的所以,我尝试改变 async -> sync
function exec1(sql, controltime) {
part1(sql, controltime, headers_view1, results_view1, tmp1);
var headers_view1 = part1.headers_view;
var results_view1 = part1.results_view;
var tmp1 = part1.tmp;
var request = part1.request;
console.log('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&');
console.log(part1.request);
console.log('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&');
console.log('====================================')
console.log(request)
console.log('====================================')
//console.time(timerName);
dbconn1.execSql(request)
}
但仍然未定义......有人告诉我尝试使用成功/失败方法问题是
- 如果我尝试使用成功/失败方法,是否正确插入第 1 部分?
- 如果我尝试更改异步-> 同步,为什么两个结果都未定义?
- 我怎样才能传输正确的请求值?
感谢您阅读这个长问题
解决方案
part1 是一个函数,但您正在尝试记录返回值。
在您的第一行中,您必须将 part1 的返回值存储在某些东西中,然后再记录 something.request。
所以第一行应该是这样的
var something = part1(sql, controltime, headers_view1, results_view1, tmp1);
然后
console.log (something.request)
推荐阅读
- python-3.x - 如何连接到本地 Postgresql 服务器并从 Python 桌面应用程序创建数据库
- python - 在 while 循环中,speech_recognition sr.listen 急剧减慢
- javascript - /** 在 js 中相对于文件而不是评论意味着什么
- go - golang 模块名称更改导致本地测试失败
- sharepoint - 使用 SharePoint 或 WOPI 在浏览器中渲染/编辑 MS Office 文档
- javascript - 具有高图表的多个集群标题
- html - 使内部 div 填充列高度 - 适用于 Chrome,但不适用于 Safari/Firefox
- json - 将 Koa 请求正文转换为字符串时转义特殊字符
- python - 从断言中给出的字符串中提取电子邮件地址并在列表中给出它们的函数
- jgit - 区分 JGit 中的轻量级标签和带注释的标签