我正在尝试获取在我的函数中运行的查询结果。
但我的结果是undefined
。我做错了什么?
功能:
function sqllis(sql_q) {
sql.connect(dbConfig, function (err) {
if (err) console.log(err);
var request = new sql.Request();
request.query(sql_q, function (err, recordset) {
return recordset.recordsets;
});
});
}
我试着得到结果:
var result = sqllis("select * from dbo.sys_user ");
console.log(result);
答案 0 :(得分:2)
sql.query
函数使用callback表示它是asynchronous代码。您无法同步解析结果。我不确定您是使用sql
还是mssql
npm库,但我建议查看是否存在本机承诺方法或将代码包装为面向承诺的方法。如果您正在使用mssql
库,则在省略回调时,它会自动返回一个承诺,您可以像这样使用它。
function sqllis(sql_q) {
sql.connect(dbConfig, function (err) {
if (err) console.log(err);
var request = new sql.Request();
return request.query(sql_q);
});
}
并像这样异步使用它:
sqllis("select * from dbo.sys_user ")
.then(function(results){ console.log(results) })
.catch(function(err){ console.log(err) });
您还可以传递回调函数。
function sqllis(sql_q, callback) {
sql.connect(dbConfig, function (err) {
if (err) console.log(err);
var request = new sql.Request();
request.query(sql_q, callback);
});
}
并像这样使用
sqllis("select * from dbo.sys_user ", function(err, results){
console.log(err);
console.log(results); //results.recordsets
})
答案 1 :(得分:0)
您必须使用callback
来返回async
函数的结果。
function sqllis(sql_q, callback) {
sql.connect(dbConfig, function (err) {
if (err) console.log(err);
var request = new sql.Request();
request.query(sql_q, function (err, recordset) {
callback(err, recordset); // USING CALLBACK
});
});
}
var result = sqllis("select * from dbo.sys_user ", (err,res) => {
console.log(res);
})
您可以参考的参考文章: