2016-04-06 22 views
-1

私はREST呼び出しを使用していくつかのデータを収集しています。ループ内で関数を作成しないようにするにはどうすればよいですか?

私は私が自分の子供に関する詳細な情報を得ることができる人

のリストを返す「ディレクトリ」のエンドポイントへの呼び出しを行い、以下の機能を持っています。
個人情報を取得するには、個々のAPIにヒットする必要があります。

var listOfPeople = []; 
var numberOfKids = []; 

//using superagent  
var req = request.get(ApiPrefix + "/directory"); 

    req.end(function (err, res) { 
       if (err || !res.ok) { 
        console.log("Error obtaining directory"); 
       } else { 

        listOfPeople.add(res.body); 

        // loop to retrieve all events. 
        for (var i = 0; i < res.body.length; i++) { 
         var personID = res.body[i].id; 

         $.getJSON('/directory/person', { 
           id: personID 
          }, 
          function (result) { 
           numberOfKids.add(result); 
          }); 
        } 
       } 
      }); 

上記のコードは完全に正常に動作している間、私はGulp watchからエラーを取得しています:

line 67, col 30, Don't make functions within a loop. (W083) 
1 error 

だから、まったく同じ動作を期待しながら、どのように私はループとAJAX呼び出しを切り離すのですか?私はあなたがforループを削除し、Array.forEach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

の使用を開始することができると思う

+0

移動に変更する必要がありますループの前の関数...名前またはvar名を与え、リテラルの代わりにその名前を使用します。グローバルを見ることができ、動的に渡されるので、配置は重要ではありません。あなたはリテラルをこの文字列 'numberOfKids.add'または最悪の場合の' numberOfKids.add.bind(numberOfKids) 'で置き換えることさえできるかもしれません。 – dandavis

答えて

0

はあなたの場合は、すべての最新のブラウザ

をサポートし、あなたのforループは

res.body.forEach(function(person){ 
    var personId = person.id; 
    // your getJson call comes here 
}); 
関連する問題