2017-04-02 11 views
2

さまざまなdbコールを処理するノードモジュールを作成しようとしています。 私はできる限り非同期/待機を使用したいと思っていますが、いくつか問題があります。ノードモジュールから非同期関数をエクスポートする方法

私は約束を少し使いましたが、それらの関数をうまくエクスポートしています。 例:

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

そして、私は次のようにエクスポート:どのように私は非同期/のawaitそのnode7で利用可能なを使用するために、非同期機能で、これを行う必要があり、

module.exports = { 
    GetUsernames: GetUsernames, 
    GetScopes: GetScopes, 
    UpdateToken: UpdateToken, 
    SetOwner: SetOwner 
}; 

しかし?

私はまだ約束を返していますか?私はそれをやろうとしましたが、私のコードで呼び出すと、うまくいきません。

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

それは私を与える:

SyntaxError: Unexpected identifier

デシベル名に(私は約束の機能を使用する場合)(その後で、正常に動作します。)

多分私のGoogleのスキルはひどいです、この問題で私が使うことのできるものはGoogleで管理していません。

私のモジュールで、他の場所で待つことができる非同期機能をどのように行うのですか?

答えて

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を参照してください。

また、FYIと同様に、クラスを返す場合を除き、小文字で関数を開始するコード規約もあります。

+1

これはどのようにしてmodule.exportsの問題を解決するのかよくわかりません。あなたは精緻化できますか? – deejbee

+2

申し訳ありません、それは明らかではありませんでした。 module.exportsは= { getUserNames:getUserNames } それとも、あなたのモジュールがエクスポートに機能権限を定義することができます。 module.exportsは= { getUserNames:非同期をあなた上記その後、追加することができますとあなたは、2つのことを行うことができますfunction(){ 戻り値await db.getUserNames(); } } –

関連する問題