
Дмитрий
30.06.2017
16:01:39
и будет тебе асинхронное выполнение

Konstantin
30.06.2017
16:01:40

Дмитрий
30.06.2017
16:02:06
Ещё раз напоминаю, что генераторы в жс не для асинхронности

Google

Konstantin
30.06.2017
16:02:08
это для изучения, а не как реализация

Дмитрий
30.06.2017
16:02:45
Асинхронность на генераторах — это уже прошлая эпоха вообще)

Konstantin
30.06.2017
16:03:20
https://github.com/tc39/proposal-async-iteration

Каїн
30.06.2017
16:03:53
Для изучения '''for(let promise of promises) await promise '''

Konstantin
30.06.2017
16:04:34

Дмитрий
30.06.2017
16:05:09
Нет
Точнее, кейс генераторов вообще в другом
Если ты делаешь кастомную итерируемую структуру, то там сам собой будет генератор

Konstantin
30.06.2017
16:08:09
Не, у меня цель сделать мега-быстрый нормализатор данных в массиве, например массив объектов 1кк.

Дмитрий
30.06.2017
16:08:34
Достаточно обычного .map

Konstantin
30.06.2017
16:08:40
и мне надо привести его к виду, где все объекты гарантированны имею/т правильную структуру и если не подходят - удалить
это ж вечность будет, если он вообще не повесит его

Google

Дмитрий
30.06.2017
16:09:26

Сергей
30.06.2017
16:10:15

Konstantin
30.06.2017
16:10:25

Олег
30.06.2017
16:10:46
Громкое заявление

Konstantin
30.06.2017
16:10:58
иногда (ИНОГДА) быстрее оказывается while
но это случайность :)

Олег
30.06.2017
16:11:23

Дмитрий
30.06.2017
16:11:35
For быстрее же
В случае таких высокоуровневых замыслов с for он быстрее напишет тонну лапши

Сергей
30.06.2017
16:11:39

Дмитрий
30.06.2017
16:11:53
Ища проблемы совсем не там откуда они придут

Олег
30.06.2017
16:12:10
Не одним v8 едины

Konstantin
30.06.2017
16:12:13

Олег
30.06.2017
16:12:15
Пока что)

Сергей
30.06.2017
16:12:47

Konstantin
30.06.2017
16:13:00
Ну ок, какой кейс генератор (func*) выполняет лучше всего?

Дмитрий
30.06.2017
16:13:01
Которая будет медленнее. Я согласен
Сначала делаешь чтобы работало
Потом делаешь чтобы быстро
Потом делаешь чтобы правильно
Попытка решать эти проблемы в другом порядке будет довольно предсказуемой
Кастомные итерируемые структуры

Google

Konstantin
30.06.2017
16:13:51

Сергей
30.06.2017
16:13:52

Дмитрий
30.06.2017
16:14:01
Нет, таких у тебя нет

Сергей
30.06.2017
16:14:10
У меня скоро цитатник от монады соберётся

Дмитрий
30.06.2017
16:14:28
?
by design

Konstantin
30.06.2017
16:15:13
ок, почитаю еще

Дмитрий
30.06.2017
16:15:19
Хотя не, ты конечно можешь имплементировать iterator protocol руками, но это довольно тупо)

Konstantin
30.06.2017
16:15:49

Сергей
30.06.2017
16:15:55

Дмитрий
30.06.2017
16:16:13

Konstantin
30.06.2017
16:17:17

Дмитрий
30.06.2017
16:18:15
class IterableTree {
parent: IterableTree
leftChild: IterableTree
rightChild: IterableTree
data: Array<any>
* [Symbol.iterator]() {
yield* this.data
yield* this.leftChild // (!!!)
yield* this.rightChild
}
}
Такой объект поддерживает for of и spread оператор и разворачивает находящиеся в нём данные (свой список и списки дочерних нод) так, как будет удобнее

Konstantin
30.06.2017
16:20:27
так генератор тоже поддерживает for..of

Дмитрий
30.06.2017
16:20:41
Кстати из этого следует один важный для твоей затеи факт
Что нормальный человеческий for of котый я тебе предлагаю с самого начала, и есть твой генератор, только в нормальной форме

Google

Konstantin
30.06.2017
16:21:53
а как структура получается --- двухсвязный список
это ж значит, что можно юзать более интересные алгоритмы. хотя я не уверен как это подружится с исходным массивом

Дмитрий
30.06.2017
16:22:42
Как опишешь — так и получается, там вообще всё на что хватит фантазии может быть)
Хоть heap, хоть double linked list, хоть что)

Konstantin
30.06.2017
16:23:29
ну будет странно описывать граф, а изначально он массив ...
... и потом опять в массив

Дмитрий
30.06.2017
16:24:13
Это не массив
Это Iterable

Admin
ERROR: S client not available

Konstantin
30.06.2017
16:24:51
array -> iterable -> array
изначально приходит массив, затем я с ним че-то делаю итератором, потом обратно в массив
Или я уже че-т не понимаю?

Дмитрий
30.06.2017
16:25:40
Я не решал твою задачу)
Я тебе показывал кейс в котором используются генераторы)

Konstantin
30.06.2017
16:25:58

Дмитрий
30.06.2017
16:26:02
Блядь
Сейчас

Konstantin
30.06.2017
16:26:08
Кстати, важный нюанс --- все происходит на клиентской машине
а она может быть слабая и галимая

Google

Дмитрий
30.06.2017
16:28:19
Монопенисуально)

Konstantin
30.06.2017
16:28:37

Дмитрий
30.06.2017
16:29:30
Просто сделай обработку данных пачками, чтобы за раз был лаг не более установленных рамок
И в воркер их
Можно сразу в пять)

Konstantin
30.06.2017
16:29:59

Дмитрий
30.06.2017
16:30:39
?

Dmitriy
30.06.2017
16:40:33

Winni
30.06.2017
16:42:19
Если работает не правильно, то это не работает
это как если решать задачу по тест кейсам, и твой код будет работать только на первом, в котором на вход undefined

Dmitriy
30.06.2017
16:46:53
а, тут под "правильно" имелось ввиду "не говнокод" наверное

Дмитрий
30.06.2017
17:00:36

Ivan
30.06.2017
17:11:06
Есть какие-нибудь прогнозы по поводу релиза telegram-mtproto? @ZeroBias
А то @alpha в проекте как-то стремно
Может чем помочь? Не вижу роадмап

shadowjack
30.06.2017
17:13:34
как красиво проверить что все ключи и значения одного объекта имеются в другом?
типа f({a: 1, b:2, c:3}, {a:1, c:3}) -> true
f({a:1, b:2, c:3}, {a: 3}) -> false

Дмитрий
30.06.2017
17:16:12

Konstantin
30.06.2017
17:18:07

? гриб
30.06.2017
17:23:43