如何从节点模块导出异步功能

Nic*_*lai 4 node.js async-await

我正在尝试编写一个节点模块,以处理我的各种数据库调用.我想尽可能使用async/await,但我遇到了一些问题.

我一直在使用promises,并导出这些函数.例:

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);
                });
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

然后我导出如下:

module.exports = {
    GetUsernames: GetUsernames,
    GetScopes: GetScopes,
    UpdateToken: UpdateToken,
    SetOwner: SetOwner
};
Run Code Online (Sandbox Code Playgroud)

但是,我应该如何使用异步函数来使用node7中可用的async/await?

我还是只回复一个承诺吗?我试过这样做,但是当我在我的代码中调用它时,它不起作用.

const db = require("dataprovider");
...
var result = await db.GetUsernames();
Run Code Online (Sandbox Code Playgroud)

它给了我:

SyntaxError:意外的标识符

在db名称上(如果我只使用promise函数,则使用then().)

也许我的谷歌技能很糟糕,但在这个问题上,我没有设法谷歌我可以使用的任何东西.

在我的模块中,我如何制作一个异步功能,我可以在其他地方等待?

Kev*_*ams 7

要打开await关键字,您需要将其置于异步函数中.

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

async function getUserNames() {
    return await db.GetUsernames();
}
Run Code Online (Sandbox Code Playgroud)

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

另外,就像一个FYI一样,它是一个用小写启动函数的代码约定,除非你从它返回一个类.

  • 我不确定这是如何解决module.exports的问题.你能详细说说吗? (3认同)
  • 对不起,不清楚.你可以做两件事,上面你可以添加:Module.exports = {getUserNames:getUserNames}或者你可以在你的模块中定义函数export:module.exports = {getUserNames:async function(){return await db .getUserNames(); }} (2认同)