2012-01-13 6 views
1

Modelクエリで使用されるコールバックにコンテキストを追加する正しい方法は何ですか?たとえば...Mongooseコールバックにコンテキストを追加する

function doSomething(param) { 
    var magic = function(context, err, results) { 
     if(err) { console.log('fail'); } 
     else { 
      // do the magic with context and results 
     } 
    } 

    for(var i=0; i < 5; i++) { 
     var myObject = {'secret' : i}; 
     MyModel.find({number:param[i]}, magic(myObject, err, results)); 
    } 
} 

各クエリの結果をループし、myObjectのコンテキストを持っています。上記の解決策は機能しません。 'err'と 'results'は定義されていません。

私は通常、これを無名関数で行いますが、forループ内のコンテキストに依存することはできません。あなたが定義したことはありませんmagicerrresultsと呼ばれる変数を渡すarerので

答えて

5

errresultsは未定義です。あなたはそれから何も返されませんので、

MyModel.findmagicからの結果と何もできない、あなたはerrresultをとる関数を返すべきです。

function doSomething(param) { 
    var magic = function(context) { 
     // return a function here 
     return function(err, results) { 
      if(err) { console.log('fail'); } 
      else { 
       // do the magic with context and results 
      } 
     }; 
    } 

    for(var i=0; i < 5; i++) { 
     var myObject = {'secret' : i}; 
     // do not pass err or results to magic 
     // they are not defined anywhere in this scope 
     MyModel.find({number:param[i]}, magic(myObject)); 
    } 
} 
+0

はい!私はまだマスターしようとしているjavascriptの奇妙さ。ありがとう。 – Greg

関連する問題