如何从节点模块导出异步函数

新手上路,请多包涵

我正在尝试编写一个节点模块来处理我的各种数据库调用。我想尽可能使用 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 许可协议

阅读 387
1 个回答

要打开 await 关键字,您需要将它放在异步函数中。

 const db = require("dataprovider");
...
let result = getUserNames();

async function getUserNames() {
    return await db.GetUsernames();
}

有关详细信息,请参阅 http://javascriptrambling.blogspot.com/2017/04/to-promised-land-with-asyncawait-and.html

此外,作为一个仅供参考,它是一个以小写字母开头的函数的代码约定,除非您要从中返回一个类。

原文由 Kevin Williams 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题