Node Js变量未显示结果

时间:2017-07-01 14:24:58

标签: node.js

我试图在变量中显示数据库值但不返回任何值。

下面是代码。

var mssql = require('mssql');
var resultData='';
function getStyleData(){    
  var msSqlSettings = {
     server      : 'localhost',
     port        : '51663',
     user        : 'sa',
     password    : 'admin1234',
     database    : 'ComWriter.Temp002'
};  
mssql.close();  
mssql.connect(msSqlSettings, function (err ) { 
    if (err) {
        throw (err);
    }   
    var getQuery = "SELECT [Title] FROM [dbo].[Templates] " ;   
    var request = new mssql.Request();          
    request.query(getQuery, function (err, rows) {          
        //console.log(rows);
        mssql.close();
        resultData = rows;
    });
}); 
   return resultData;
}




var getFunction = getStyleData();

   console.log(getFunction);

2 个答案:

答案 0 :(得分:0)

看起来您在调用connect之后立即返回resultData,可能在连接建立之前,以及查询返回结果之前。节点是异步的,所以它不会等待结果,尝试在request.query调用中的console.log行。

mssql.connect(msSqlSettings, function (err ) { 
    if (err) {
        throw (err);
    }   
    var getQuery = "SELECT [Title] FROM [dbo].[Templates] " ;   
    var request = new mssql.Request();          
    request.query(getQuery, function (err, rows) {          
        //console.log(rows);
        mssql.close();
        console.log(JSON.stringify(rows));
    });
}); 

您可以将回调传递给getStyleData()并将此回调传递给request.query(),这样在查询完成时将以异步方式返回行。这样您就可以传入想要使用结果的回调。

getStyleDate(done){
    // your code ...
    mssql.connect(msSqlSettings, function (err ) { 
        if (err) {
            throw (err);
        }   
        var getQuery = "SELECT [Title] FROM [dbo].[Templates] " ;   
        var request = new mssql.Request();          
        request.query(getQuery, done);
    }); 

}

答案 1 :(得分:0)

您无法以同步方式从回调(异步)返回数据

需要重构代码。

function getStyleData(callback) {
    var msSqlSettings = ..//;
    mssql.connect(msSqlSettings, function (err) {
        if (err) {
            callback("error message", null);
        }
        //query
        request.query(getQuery, function (err, rows) {

            resultData = rows;
            if (err) {
                callback("error message", null);
            } else {
                callback(null, resultDat);
            }
        });
    });
}



getStyleData(function (err, data) {

    if (err) {
        console.log("error");
    }

    console.log(data);
});