Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript async JS:为什么我的变量解析为未定义?_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript async JS:为什么我的变量解析为未定义?

Javascript async JS:为什么我的变量解析为未定义?,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在从数据库中获取数据。这很有效 然而,我的代码流有一些问题,我认为这与异步有关:为什么facturasDotaciones[]几乎是最后一行代码解析为未定义 TraerFacturasTotaliones不会返回任何内容。它调用request2.execute,后者调用传递响应的回调函数。 一个选项是将facturasDotaciones作为参数传递给traerFacturasDotaciones,并在该函数中设置值,但即使这样,它也将以asncy方式赋值。查看request.execute

我正在从数据库中获取数据。这很有效

然而,我的代码流有一些问题,我认为这与异步有关:为什么facturasDotaciones[]几乎是最后一行代码解析为未定义


TraerFacturasTotaliones不会返回任何内容。它调用request2.execute,后者调用传递响应的回调函数。
一个选项是将facturasDotaciones作为参数传递给traerFacturasDotaciones,并在该函数中设置值,但即使这样,它也将以asncy方式赋值。查看request.execute方法是否返回您可以等待的承诺?

函数TraerFacturasTotaciones不返回任何内容。注意,return语句位于回调函数中,作为request2.execute的第二个参数。但该回调是异步执行的,函数traerFacturasDotaciones在该回调执行之前结束

//npm sql DB access module (https://www.npmjs.com/package/mssql)
var sql = require('mssql'); 

//sql config object (username, password, etc)
var config = {
    bla, bla, bla
}

function traerFacturasDotaciones(){ 
            var request2 = new sql.Request(connection);             
            request2.execute('seleccionarFacturasCorreosDotaciones', function(err, response, returnValue) {

                function peluquiarFacturas(facturas){
                    for(var i=0;i<facturas[0].length;i++){  
                        facturas[0][i]["CO"]=facturas[0][i]["CO"].trim();    
                    }
                    return facturas;
                }
                return peluquiarFacturas(response);
            });
}

//get data from server and clean up
var connection = new sql.Connection(config, function(err) {
    var request = new sql.Request(connection);
    request.execute('seleccionarTiendas', function(err, tiendasRet, returnValue) {
        var facturasDotaciones=[];
        facturasDotaciones=traerFacturasDotaciones();
        console.log("facturasDotaciones", facturasDotaciones);
    });
});