2016-04-05 18 views
1

これは比較的一般的な問題ですが、これに対する回答を見つけることができません。他のすべての質問は、単に変数を空のクロージャに追加することに関連しているようです。既存のコールバック関数に追加の引数を渡す方法

私は2つの引数を取るコールバックを持っています。 errdocsが必要ですが、 `dataの追加引数を追加したいと考えています。

db.findOne().exec(function (err, docs) { 
    // err is defined 
    // docs is defined 
}); 

私はので、私はこれを行うことが想定さ、それに伴いdataに合格する必要があります。

db.findOne().exec(function (err, docs, data) { 
    // err is defined 
    // docs is defined 
}(data)); 

これは動作しません。だから、私は次のことを試してみました:

db.findOne().exec(function (err, docs, data) { 
    // err is null 
    // docs is null 
}(null, null, data)); 

これは、同様に元の変数errdocsを殺しました。

私はこれをどうやってやっていくのですか?

+0

'関数(errは、ドキュメント、データ){' '内部function'を返す必要があります'.exec'のハンドラとして – Rayon

答えて

1

あなたは、単に(だけdb.findOne()メソッドを呼び出す前に)限り、この変数は、外側のスコープで定義されているコールバック内data変数を使用することができます。

var data = ... 
db.findOne().exec(function (err, docs) { 
    // err is defined 
    // docs is defined 
    // data is defined 
}); 
0

をあなたはコールバック関数内で、あなたの関数をラップする必要があります。

あなたのような機能を持っている場合:

db.findOne().exec(function (err, docs) { 
    // err is defined 
    // docs is defined 
}); 

あなたは追加のパラメータを渡すために、次の機能を使用することができます。

db.findOne().exec(function (err, docs) { 
var data={a:'a'}; 
    yourFunction(err, docs, data); 
}); 

function yourFunction(err, docs, data){ 
// access data here 
} 
関連する問題