我正在尝试编写一个节点模块来处理我的各种数据库调用。我想尽可能使用 async/await,但我遇到了一些问题。
我一直在使用 Promise,并且可以很好地导出这些功能。例子:
function GetUsernames() {
return new Promise(function (resolve, reject) {
sql.connect(config).then(function () {
new sql.Request()
.query("SELECT [UserName] FROM [Users] ORDER BY [LastLogin] ASC").then(function (recordset) {
resolve(recordset);
}).catch(function (err) {
reject(err);
});
});
});
}
然后我导出以下内容:
module.exports = {
GetUsernames: GetUsernames,
GetScopes: GetScopes,
UpdateToken: UpdateToken,
SetOwner: SetOwner
};
但是,我应该如何使用 async 函数来使用 node7 中可用的 async/await?
我仍然只是回报一个承诺吗?我试过这样做,但是当我在我的代码中调用它时,它不起作用。
const db = require("dataprovider");
...
var result = await db.GetUsernames();
它给了我:
SyntaxError:意外的标识符
在数据库名称上(如果我只使用 promise 函数和 then() 就可以正常工作。)
也许我的谷歌技能很糟糕,但在这个问题上,我还没有设法用谷歌搜索任何我可以使用的东西。
我到底如何在我的模块中创建一个可以在其他地方等待的异步函数?
原文由 Nicolai 发布,翻译遵循 CC BY-SA 4.0 许可协议
要打开 await 关键字,您需要将它放在异步函数中。
有关详细信息,请参阅 http://javascriptrambling.blogspot.com/2017/04/to-promised-land-with-asyncawait-and.html 。
此外,作为一个仅供参考,它是一个以小写字母开头的函数的代码约定,除非您要从中返回一个类。