2017-05-16 5 views
0

を追加し約束約束を使ってNode.jsの中で次の操作を行うためのよりよい方法はあります:Node.jsのは、スコープ

var y = "..."; 

promise.using(getDatabaseConnection() function(connection) { 
    return connection 
    .query("some sql") 
    .then(function(result) {callAnotherFunction(result, y);} 
    .catch(function(error) {callAnotherFunction(error, y);} 
}); 

これは動作しますが、読みにくい/探して少し不格好です。私が試してみました:

.then(callAnotherFunction.bind(null, y)) 

を他に示唆したようにSO

.then(callAnotherFunction(y)) 

を投稿して

本当にシンプルなソリューションを期待しますが、どちらも働きました。

ありがとうございます!

私はあなたがそうも近代的なノードを仮定しよう、青い鳥と仮定すると、ここで Promise.usingを使用している参照

答えて

1

あなたはこのようにそれを設定することができますを確認します。

const callAnotherFunction = function(y) { 
return function(result) { 
    console.log('y',y); 
    console.log('result',result); 
    return 'something' 
} 
} 

promise.using(getDatabaseConnection() function(connection) { 
    return connection 
    .query("some sql") 
    .then(callAnotherFunction(y)) 
    .catch(callAnotherFunction(y)) 
}); 
+0

おかげ - それを!完璧に働いた:) –

3

async function whatever(y = "...") { 
    await promise.using(getDatabaseConnection(), async conn => { 
    try { // try/catch outside the using depending on whether the handling 
      // requires the connection or not 
     callAnotherFunction(await conn.query("some sql"), y); 
    } catch (e) { 
     callAnotherFunction(e, y); 
    } 
    }); 
} 

関数は結果だけのための約束を返すのではなく、それ以来、継続を呼び出す必要があります、が、このように構成可能です。

+0

私はそう、私は非同期がサ​​ポートされていることはないと思う6.10.3 LTSを使用しています:(、そうでない場合は、これは完璧だっただろう –