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, время: 08:06. |