foreach как узнать о завершении работы цикла?
Здравствуйте!
Подскажите пожалуйста, можно ли отследить завершение работы цикла foreach? Если - да, то как это сделать? |
Нет такого ключевого слова как «foreach» следовательно и цикла цикла «foreach» существовать не может.
Зато в прототипе предопределенного базового типа Array реализован метод forEach как и любой другой метод(функция объекта) он завершает свою работу возвращением результата. Любой код написанный после вызова метода forEach будет исполнятся только после завершения вызова forEach и никак иначе. Проблема скорее всего в том что ты не понимаешь как должен работать код который ты пишешь. Например используешь асинхронные вызовы которые будут исполнены в будущем средой исполнения когда исполнение forEach уже давно завершится. Асинхронно выполняются функции таймеров (SetTimeOut) или же запрос внешних ресурсов (AJAX) и им подобные. |
[1,2,3].forEach((el,i,arr)=>{
//некий код
if(i == arr.length-1) console.log('Метод кончается!');
});
вот та шляпа что вам нужна! |
Цитата:
|
Цитата:
|
Цитата:
let arr = [1, 2, 3];
arr.forEach((el, i, a) => {
if (i === 2) return;
a[i] = el * 2
});
alert(arr.join())
|
Цитата:
(я как-то сначала даже подумал, что return в стрелочных функциях тоже "внешний" :D ) вот some - тут действительно есть break, цикл дальше не едет
var arr = [1, 2, 3, 4, 5];
arr.some((el, i, a) => {
if (i === 2) return true;
a[i] = el * 2
});
alert(arr.join())
|
не только some но и find, findIndex, every
|
Alexandroppolus,
совершенно правильно. для эмуляции break в цикле, вам достаточно выкинуть ошибку и выше ее перехватить
var arr = [1, 2, 3];
try {
arr.forEach((el, i, a) => {
if (i === 1) {
throw 'break'
}
a[i] = el * 2
});
} catch (e) {
console.log(e)
}
alert(arr.join())
|
Poznakomlus, ну это уж совсем...:)
Если уж очень хочется foreach, то можно юзать for of(предварительно обмазавшись всякими бабелами):
for(let value of array){
//...
}
|
| Часовой пояс GMT +3, время: 19:14. |