Дима
Ну на этом месте возникает сразу куча вопросов
Дима
От того, почему нужно именно последовательное итерирование вместо параллельного выполнения до того, почему при этом не подходит обычная нормальная функция с for of и await
👨🏼💻
Так удобно ж вызвать: iterator.next() ---> и дальше обрабатывать value, при этом выполнение остального кода не останавливается
Дима
Лол, оно нигде не останавливается
Дима
Генераторы в же НЕ ДЛЯ асинхронности
👨🏼💻
пока исполняется цикл остальной код не ждет?
Дима
Не смотря на то, что часто их так и используют, это костыль
Дима
Дима
Поменяй консаль
👨🏼💻
ну дык консоль.логи выводит как и пологается
1. до цикла
2. все итерации в цикле
3. тот что после цикла
👨🏼💻
абсолютно синхронно
Дима
(async() => { for (const url of keys) console.log( await axios.get( url ) ) })()
👨🏼💻
та не для этого же
Дима
Что не для этого?
Serhii
Сделай метод промисам .next = .then и будет почти пистон
Дима
Асинхронные циклы — это не для асинхронных неблокирующих запрсов?
👨🏼💻
ну например: let a = [1,2,3]
for (let i = 0; i < a.length; i++) {
a[i] = a[i] + 1
}
Serhii
Только синхронный.. но зато не блокирующий ы
👨🏼💻
как мы понимаем это просто цикл
Дима
Здорово
Дима
Скажу по секрету
👨🏼💻
а теперь тоже самое, но с помощью функции генератора
Дима
В генераторах будет так же
Дима
Сразу нет
Дима
Ты пишешь про асинхронность
👨🏼💻
в генераторе будет из next прилетать value
Дима
Здорово
👨🏼💻
так вот пока цикл не отработает, я дальше ничего не могу сделать
Serhii
Дима
И приводишь в пример СИНХРОННЫЙ код
👨🏼💻
с генератором тоже будет синхронный?
👨🏼💻
или пока я буду дёргать каждый iterate.next() ---> будет выполняться остаток кода в файле?
Дима
Боже
Дима
Сделай просто for с await
Дима
и будет тебе асинхронное выполнение
👨🏼💻
Дима
Ещё раз напоминаю, что генераторы в жс не для асинхронности
👨🏼💻
это для изучения, а не как реализация
Дима
Асинхронность на генераторах — это уже прошлая эпоха вообще)
👨🏼💻
https://github.com/tc39/proposal-async-iteration
Serhii
Для изучения '''for(let promise of promises) await promise '''
Дима
Нет
Дима
Точнее, кейс генераторов вообще в другом
Дима
Если ты делаешь кастомную итерируемую структуру, то там сам собой будет генератор
👨🏼💻
Не, у меня цель сделать мега-быстрый нормализатор данных в массиве, например массив объектов 1кк.
Дима
Достаточно обычного .map
👨🏼💻
и мне надо привести его к виду, где все объекты гарантированны имею/т правильную структуру и если не подходят - удалить
👨🏼💻
это ж вечность будет, если он вообще не повесит его
Sergey
👨🏼💻
Smooth Operator
Громкое заявление
👨🏼💻
иногда (ИНОГДА) быстрее оказывается while
👨🏼💻
но это случайность :)
Дима
For быстрее же
В случае таких высокоуровневых замыслов с for он быстрее напишет тонну лапши
Sergey
Sergey
Дима
Ища проблемы совсем не там откуда они придут
Smooth Operator
Не одним v8 едины
👨🏼💻
Smooth Operator
Пока что)
👨🏼💻
Ну ок, какой кейс генератор (func*) выполняет лучше всего?
Дима
Которая будет медленнее. Я согласен
Сначала делаешь чтобы работало
Потом делаешь чтобы быстро
Потом делаешь чтобы правильно
Попытка решать эти проблемы в другом порядке будет довольно предсказуемой
Дима
Дима
Кастомные итерируемые структуры
Sergey
Дима
Дима
Нет, таких у тебя нет
Sergey
У меня скоро цитатник от монады соберётся
Дима
🙈
Дима
Дима
by design