作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所有使用 mssql 客户端包/繁琐驱动程序的示例都是针对异步/回调/ promise 的,但我只是开发一个使用有限的微服务,而且我对异步函数的理解仍然有点模糊。这是我尝试使用 async/await 的方法:
报告生成类:
const mssql = require('mssql');
const events = require('events');
class reporter {
constructor(searcher, logger) {
// Pass in search type and value or log the error of none defined
this.lg = logger
if (searcher.type && searcher.content) {
this.lg.lg("reporter created", 3)
this.srchType = searcher.type;
this.srchContent = searcher.content;
} else {
this.lg.lg("!MISSING SEARCH PARAMETERS", 0);
this.err = "!MISSING SEARCH PARAMETERS";
}
}
proc() {
//DB Connect async
async () => {
try {
await mssql.connect('mssql://username:password@localhost/database')
this.result = await mssql.query`select * from mytable where id = ${this.searcher}`
} catch (err) {
// ... error checks
}
}
return this.result;
}
}
然后调用:
//Pass to reporter for resolution
var report1 = new reporter(searcher, logs);
report1.proc();
我确信这可能是实现这一目标的一种非常糟糕的方法,因此我也愿意接受任何有关实现最终目标的好方法的意见,但我仍然想知道是否可以同步完成.
最佳答案
您无法同步执行此操作。弄清楚这个异步的东西绝对值得你花时间和精力。
async/await/promise 让你或多或少可以假装同步进行
const report1 = new reporter(searcher, logs);
report1.proc()
.then ( result => {
/* in this function, "result" is what your async function returned */
/* do res.send() here if you're in express */
} )
.catch ( error => {
/* your lookup failed */
/* inform the client of your web service about the failure
* in an appropriate way. */
} )
并且,在 proc 函数中解开异步函数,如下所示:
async proc() {
try {
await mssql.connect('mssql://username:password@localhost/database')
this.result = await mssql.query`select * from mytable where id = ${this.searcher}`
} catch (err) {
// ... error checks
}
return this.result;
}
await
和 .then
是类似的。
关于javascript - 如何在node.js中同步连接mssql服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55593959/
我是一名优秀的程序员,十分优秀!