繁体   English   中英

Javascript:如何返回 object 类型?

[英]Javascript : How can i return object type?

这些天我正在尝试学习js。 我做了一些东西,但我发现了一些问题。 我该如何解决这个问题?

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);
    var request = request;
    console.log(typeof(request));
    console.log('-----------------------------')
    return {headers_view:headers_view, results_view:results_view, tmp:tmp, request:request};

我检查 [console.log(typeof(request))] 和 [console.log(request)]。 以前的类型是'object',信件请求有它自己的价值(SQL ...)

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)] 时。 该值为“未定义”。 为什么会出现这个问题? 我该如何解决这个问题?

更新请求 sql 如下

Request {
  _events: [Object: null prototype] { doneProc: [Function], row: [Function] },
  _eventsCount: 2,
  _maxListeners: undefined,
  sqlTextOrProcedure: " SELECT [Head],round([Avg],2) as 'TS_Avg' FROM [first_Class].[dbo].[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
}

请求在 part1 方法之外未定义的原因是,正如您在评论中所述,它是异步 function。

因此,在调用 part1 之后执行的代码行,不要等待它的调用完成。

为了获得 part1 方法的调用结果,您需要将成功/失败回调方法传递给它,并在方法 part1 完成执行时使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM