我在使用node mssql设置角度数据库服务时遇到异步问题。
基本上我希望这项服务成为从数据库查询的中心位置。
我面临的问题是,当应用程序加载时,我需要它进行初始查询,当发生这种情况时,连接方法尚未完成。
如何让查询函数在执行之前等待池解析为某个值?
const sql = require('mssql');
userManagerApp.service('SqlService', function() {
var pool;
var connect = async function() {
pool = await sql.connect('mssql://user:pass@host/database')
}
connect();
var query = async function (query) {
try {
var results = await pool.request().query(query).recordset;
return results;
} catch (e) {
console.log(e);
}
}
var theService = {
query : query
};
return theService;
});
答案 0 :(得分:0)
查看NPM MSSQL上的示例 试试这种方法:
const sql = require('mssql');
userManagerApp.service('SqlService', function() {
var query = async function (query) {
try {
let pool = await sql.connect(sqlConfig)
let result = await pool.request().query(query).recordset
} catch (e) {
console.log(e);
}
}
var theService = {
query : query
};
return theService;
});
答案 1 :(得分:0)
service
服务被滥用,因为已有this
服务实例,无需返回新服务。
应该在所有依赖它的方法中存储和链接连接的承诺,这是一个常见的配方(例如在Mongoose中使用):
userManagerApp.service('SqlService', function() {
this.poolPromise = sql.connect('mssql://user:pass@host/database');
this.query = async (query) => {
try {
const pool = await this.poolPromise;
const results = await pool.request().query(query).recordset;
return results;
} catch (e) {
console.log(e);
throw e;
}
}
});