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};
}

以上控制台。日志(请求(结果为

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(请求(&(part1.request(未定义因此,我尝试更改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);
dbconn1.execSql(request)
}

但仍然没有定义。。。有人告诉我试着用成功/失败的方法问题是

  1. 如果我尝试使用成功/失败方法,插入第1部分是否正确
  2. 如果我尝试更改async->sync,为什么两个结果都未定义
  3. 如何传输正确的请求值

感谢您阅读这个长问题

part1是一个函数,但您正在尝试记录返回值。

在你的第一行中,你必须将part1的返回值存储在某个东西中,然后再记录一些东西。request.

所以第一行应该是类似的东西

var something=part1(sql、controltime、headers_view1、results_view1和tmp1(;

然后

console.log(something.request(

最新更新