从节点mssql返回数据执行函数

时间:2016-09-23 11:52:02

标签: javascript sql-server node.js npm

我正在使用 npm mssql Microsoft SQL Server客户端for Node.js )软件包。我正在尝试执行驻留在我的sql server数据库中的存储过程。一切正常。但是我要做的是返回记录集,以便我可以将其导出以用于其他模块。我正在尝试要做。

function monthlyIceCreamSalesReport (scope){
var connObj = connConfig();
connObj.conn.connect(function(err){
    if(err){
        console.log(err);
        return;
    }
    connObj.req.input('Month',4);
    connObj.req.input('Year',2016);

    connObj.req.execute('<myStoredProcedure>', function(err, recordsets, returnValue){
        if(err){
            console.log(err);
        }
        else {
            console.log(recordsets[0]); // successfully receiving the value
        }
        connObj.conn.close();
    });
  });
  console.log('check for recordsets', recordsets[0]); // undefined
  return recordsets[0];
}
var sqlServerObj = {
    monICSalesReport : monthlyIceCreamSalesReport,
};
module.exports = sqlServerObj;

如代码片段所示,由于recordsets [0]的值未定义,因此导出此函数是没有用的。

2 个答案:

答案 0 :(得分:0)

  

在异步性质中你不能return这样。您可以通过传递callback函数

来获取它

尝试提供像这样的回调函数

function monthlyIceCreamSalesReport(scope, callback) { // pass a callback to get value

    var connObj = connConfig();
    connObj.conn.connect(function(err) {
        if (err) {
            console.log(err);
            return;
        }
        connObj.req.input('Month', 4);
        connObj.req.input('Year', 2016);

        connObj.req.execute('<myStoredProcedure>', function(err, recordsets, returnValue) {
            if (err) {
                console.log(err);
            } else {
                console.log(recordsets[0]);
                connObj.conn.close();
                return callback(null, recordsets[0]); //return as a callback here and get that value in callback from where you called this function 
            }
        });
    });
 }
var sqlServerObj = {
    monICSalesReport: monthlyIceCreamSalesReport,
};
module.exports = sqlServerObj;

注意:查看评论以了解更改

答案 1 :(得分:-1)

<?php $arr = array( 1, 2, 3, 4 ); $arrGreaterThanTwo = array_filter($arr, function($item){ return $item > 2; }); 未定,因为仅在recordsets[0]函数范围内定义。你可以这样做:

connObj.req.execute