2016-04-06 5 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, ожидая точно такое же поведение?

+0

двигаться функция до цикла ... дайте ему имя или имя var, и используйте это вместо литерала. поскольку он может видеть глобальный и передается динамический, размещение не имеет значения. вы, возможно, даже сможете заменить литерал таким буквальным 'numberOfKids.add' или наихудшим случаем' numberOfKids.add.bind (numberOfKids) ' – dandavis

ответ

0

Я думаю, что вы можете удалить цикл и начать использовать Array.forEach https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

поддерживает все новейшие браузеры

В вас случае, Ваш цикл должен быть изменен

res.body.forEach(function(person){ 
    var personId = person.id; 
    // your getJson call comes here 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^