2017-04-02 57 views
2

我正在尝试编写节点模块来处理我的各种数据库调用。 我想尽可能使用异步/等待,但我遇到了一些问题。如何从节点模块导出异步功能

我一直在使用承诺一点,并导出这些功能很好。 例子:

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 
}; 

不过,我应该怎么做,有一个异步功能,使用异步/静候可在node7?

我还只是答应了吗?我试过这样做,但是当我在代码中调用它时,它不起作用。

const db = require("dataprovider"); 
... 
var result = await db.GetUsernames(); 

它给我:

SyntaxError: Unexpected identifier

的数据库名称

也许我的谷歌技能是可怕的(()工作正常,如果我只是用承诺的功能,与当时)但在这个问题上,我还没有设法谷歌任何我可以使用的。

在我的模块中,我怎样才能使异步函数在其他地方等待?

回答

4

要打开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了解更多信息。

此外,就像一个参考,它是一个代码约定,以小写启动函数,除非您从中返回一个类。

+1

我不知道这是如何解决module.exports的问题。你能详细说明吗? – deejbee

+2

对不起,不清楚。你可以做两件事情,与上面,你可以再添加: Module.exports = { getUserNames:getUserNames } 或者你可以定义函数就在你的模块出口: module.exports = { getUserNames:异步函数(){ return await db.getUserNames(); } } –