gpt4 book ai didi

javascript - 如何在node.js中同步连接mssql服务器

转载 作者:行者123 更新时间:2023-12-02 23:52:10 25 4
gpt4 key购买 nike

所有使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com