NodeJS SQL 服务器数据拉取不等待承诺完成
NodeJS SQL Server data pull isn't waiting for promise completion
我正在使用 Node.js 重写一个 ASPX 应用程序。此应用程序的一部分是从 SQL 服务器中的 table 提取数据。我正在使用异步函数来尝试并强制在继续之前提取数据。在下一步之前我有数据是很重要的。但是,当它 returns 来自 await 时,响应为空。
const getUserGroups = async (user) => {
let qry = `Select role from [xxxxx] where LOWER(yyyyy)='${user.toLowerCase()}'`;
let groups = await dataQuery.Select(qry, dbList.MCAIntranet)
console.log("Groups: ", groups); //This is undefined
return groups;
// })
}
这里是 Select 函数:
const Select = async (query, database) => {
// console.log(config[database]
sql.connect(config[database], (err) => {
if (err) console.log(err);
let request = new sql.Request();
request.query(query, (err, recordset) => {
console.log(recordset)//displays correct data
if (err) {
console.log(err);
return null
}
return recordset;
})
});
}
我正在使用 mssql 模块,但由于我是 Node 的新手,所以我不确定我的错误在哪里。
提前感谢您查看此内容。
您可以使用 Promise 对象包装您的实现,或者 return Promise.resolve(data);
,并且 return Promise.reject(err)
:
const Select = async (query, database) => {
return new Promise((resolve, reject) => {
// console.log(config[database]
sql.connect(config[database], (err) => {
if (err) reject(err);
let request = new sql.Request();
request.query(query, (err, recordset) => {
console.log(recordset)//displays correct data
if (err) {
console.log(err);
reject(err);
}
resolve(recordset);
})
});
});
}
在您当前的代码中,return 您的 Select
函数中没有任何内容。特别是您没有将 sql 代码包装在 promise 中。
你说,你用的是mssql
包。这已经支持 async/await,因此您应该使用适当的异步调用而不是回调。
const Select = async (query, database) => {
try {
await sql.connect(config[database]);
let request = new sql.Request();
let recordset = await request.query(query);
return recordset;
} catch (e) {
console.log(e);
return null;
}
}
此外,您应该阅读有关参数化查询的内容,因为目前您的代码非常不安全,即它容易受到 SQL 注入和无效语法错误的影响。
我正在使用 Node.js 重写一个 ASPX 应用程序。此应用程序的一部分是从 SQL 服务器中的 table 提取数据。我正在使用异步函数来尝试并强制在继续之前提取数据。在下一步之前我有数据是很重要的。但是,当它 returns 来自 await 时,响应为空。
const getUserGroups = async (user) => {
let qry = `Select role from [xxxxx] where LOWER(yyyyy)='${user.toLowerCase()}'`;
let groups = await dataQuery.Select(qry, dbList.MCAIntranet)
console.log("Groups: ", groups); //This is undefined
return groups;
// })
}
这里是 Select 函数:
const Select = async (query, database) => {
// console.log(config[database]
sql.connect(config[database], (err) => {
if (err) console.log(err);
let request = new sql.Request();
request.query(query, (err, recordset) => {
console.log(recordset)//displays correct data
if (err) {
console.log(err);
return null
}
return recordset;
})
});
}
我正在使用 mssql 模块,但由于我是 Node 的新手,所以我不确定我的错误在哪里。
提前感谢您查看此内容。
您可以使用 Promise 对象包装您的实现,或者 return Promise.resolve(data);
,并且 return Promise.reject(err)
:
const Select = async (query, database) => {
return new Promise((resolve, reject) => {
// console.log(config[database]
sql.connect(config[database], (err) => {
if (err) reject(err);
let request = new sql.Request();
request.query(query, (err, recordset) => {
console.log(recordset)//displays correct data
if (err) {
console.log(err);
reject(err);
}
resolve(recordset);
})
});
});
}
在您当前的代码中,return 您的 Select
函数中没有任何内容。特别是您没有将 sql 代码包装在 promise 中。
你说,你用的是mssql
包。这已经支持 async/await,因此您应该使用适当的异步调用而不是回调。
const Select = async (query, database) => {
try {
await sql.connect(config[database]);
let request = new sql.Request();
let recordset = await request.query(query);
return recordset;
} catch (e) {
console.log(e);
return null;
}
}
此外,您应该阅读有关参数化查询的内容,因为目前您的代码非常不安全,即它容易受到 SQL 注入和无效语法错误的影响。