2017-04-02 85 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(); } } –