Код
var returnValue = false;
var myList = myService.getBigListOfStuff(); // an array that contains a bunch of integers, one of which is 4
var stupidArray = [4]; // just contains the number 4
angular.forEach(stupidArray, function(myListItem){
if(lodash.contains(myList, myListItem){
returnValue = true;
}
});
return returnValue;
Ошибка
4
в myList
, но возвращается false.Потому что оператор return
получает удар перед оператором returnValue = true;
.Код не делает ничего асинхронного, как, например, вызов http.get
.Это просто поиск числа в большом массиве с использованием lodash.contains
.
Случайные наблюдения
Это происходит только в одной из моих сред, где используется сопоставление источника;не на моей локальной машине.В этой среде в отладчике Chrome несколько номеров строк для кода выделены серым, и я не могу поставить точки останова ни на одну из этих строк, но на моей локальной машине все номера строк являются черными, и я могу поставить точки останова на любой изих.Мой друг считает angular.forEach
асинхронным, но я не вижу никакой документации на этот счет.Я посмотрел на исходный код для него и не вижу там ничего асинхронного.
Что я сделал
Я изменилкод для использования цикла javascript for
, и проблема исчезла во всех средах.Тем не менее, разработчик использовал angular.forEach
повсеместно, поэтому есть проблема, что мы можем возвращать значения до того, как они были обработаны предыдущими циклами.