2017-07-01 152 views
1

我想返回节点js中的数据库值并作为ejs文件中的变量传递。节点Js回调函数

波纹管是我使用的代码。 它没有返回值。

function getExternalLocation(cb) { 

    mssql.connect(msSqlSettings, function (err) { 
     if (err) { 
      cb(err); 
     }  
     var getQuery = "SELECT [Title] FROM [dbo].[StyleTemplates] " ; 
     //console.log(getQuery); 
     var request = new mssql.Request();   
     // query to the database and get the data 

     request.query(getQuery, function (err, rows) { 
      mssql.close(); 
      cb(err, rows);   
     }); 
    }); 
} 

exports.eejsBlock_editbarMenuLeft = function (hook_name, args, cb) { 
    var userData = getExternalLocation(args, function(err, rows) {}); 
    args.content = args.content + eejs.require(
     'ep_resources/templates/editbarButtons.ejs', { 
     userData: userData 
    }); 
    return cb(); 
}) 

userData没有返回任何值。

+1

可能重复[如何从异步调用返回响应?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -asynchronous-call) –

+0

如果你不使用它,为什么要实现一个回调?小提示*行*包含你想要的 –

+0

基本上,我想返回数据库存储在“行”变量中的所有值。但是当我使用**返回行时,它不会返回任何值** – Sushil

回答

1
var userData = getExternalLocation(args, function(err, rows) {}); 

我不认为userData会在异步函数中获取正确的数据,因为没有等待,因此您可以尝试在回调中获取数据。

getExternalLocation(args, function(err, rows) { 
    var userData = rows; 
    args.content = args.content + eejs.require(
    'ep_resources/templates/editbarButtons.ejs', { 
    userData: userData 
    }); 
}); 
+0

如果可能,您可以给我一个示例代码吗? – Sushil

+0

答案是使用回调的示例代码,如果您想使用async/await,则需要阅读关于promise和async的ES6 api。 – Borkes