These are chat archives for dev-ua/reactjs

26th
Aug 2015
Ivan Kurnosov
@zerkms
Aug 26 2015 21:58
Всё-таки не очень получается нормально сделать роутинг с реакт-роутером :-(
если расценивать урл такой же инпут как и всё остальное
то появляется проблема, что во время его изменения (во время диспетчеризации) Router.run запускает новый рендеринг
и всё ломается, ибо так делать нельзя
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:07
да зачем вы все пробуете этот несчастный реакт-роутер?
оставьте его в покое
Terry Sahaidak
@terrysahaidak
Aug 26 2015 22:07
а є щось краще?
я, як новачок, поки не бачив ніякої альтернативи)
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:08
там свой велосипед сделать просто и есть вроде бы неплохие от @koistya и еще кто-то делал (@nkbt)?
Ivan Kurnosov
@zerkms
Aug 26 2015 22:09

и еще кто-то делал (@nkbt)?

:-D

Terry Sahaidak
@terrysahaidak
Aug 26 2015 22:09
банальна логіка: а хіба якийсь велосипед краще, ніж штука, над якою працює декілька чоловік вже довший час?
Ivan Kurnosov
@zerkms
Aug 26 2015 22:09
@chicoxyzzy а тут даже скорее всего не в конкретной реализации дело
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:09
все потом разочаровываются в RR
все
Ivan Kurnosov
@zerkms
Aug 26 2015 22:09
я вот затрудняюсь представить цикл диспетчеризации с роутером
допустим сценарий:
по клику на кнопку меняется урл и соответственно контент
реализация:
по клику создаётся и диспетчеризуется ивент, который слушает каким-то листенереом
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:10
и вообще у него логика в контексте живет. что явно тревожный звоночек
Ivan Kurnosov
@zerkms
Aug 26 2015 22:10
который меняет роут (и урл)
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:10
так
Ivan Kurnosov
@zerkms
Aug 26 2015 22:10
в момент смены урла роутер начиает перерендеривать приложение
потому что это то, что он должен делать
и всё, эксепшн
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:11
?
Ivan Kurnosov
@zerkms
Aug 26 2015 22:11
нельзя рендериться во время диспетчеризации
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:11
я не понял честно говоря.
Ivan Kurnosov
@zerkms
Aug 26 2015 22:12
что именно?
Terry Sahaidak
@terrysahaidak
Aug 26 2015 22:12
Ден Абрамов десь на якісь конфі (чи шо то було, вже не згадаю) недавно казав, що скоро нарешті РР піде шляхом істенним
може він таки правий?
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:13
@terry-s может быть. но пока там все на контексте компонент
Ivan Kurnosov
@zerkms
Aug 26 2015 22:14
контекст там только чтобы получить доступ к инстансу роутера
технически разницы нет откуда ты его берёшь
ибо всё равно у тебя в приложении он будет один
хоть из глобальной переменной бери
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:15
у rr есть шанс на будущее
rackt/react-router#1728
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:16
короче по роутеру. есть экшны, которые пушстейт и меняют состояние сторы, отвечающей за навигацию и есть попстейт, который тоже вызывает экшны, меняюще состояние этой сторы
не знаю что там за проблемы могут быть
Ivan Kurnosov
@zerkms
Aug 26 2015 22:17
какой сторы
роутер должен перерендеривать приложение от корня
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:18
и?
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:18
да, в корне у тебя компонент который слушает routerstore
Ivan Kurnosov
@zerkms
Aug 26 2015 22:18
он не может это делать, потому что в этот момент приложение находится в процессе диспетчеризации
@vslinko вот это звучит уже лучше, но кто-то так делал уже?
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:19
вроде все
кто не rr
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:19
+
Ivan Kurnosov
@zerkms
Aug 26 2015 22:19
вообще ни разу не видел
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:19
ты какой флакс юзаешь
Ivan Kurnosov
@zerkms
Aug 26 2015 22:19
покажите?
redux
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:19
там же нет проблем с диспетчерезацией, вроде
можно создавать события и в момент
Ivan Kurnosov
@zerkms
Aug 26 2015 22:20
сценарий выше из жизни
события можно
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:20
сейчас поищу что-то свое
Ivan Kurnosov
@zerkms
Aug 26 2015 22:20
но рендериться нельзя
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:20
React.render(<App route={route}/>, container);
ты можешь вызывать это сколько хочешь раз
Ivan Kurnosov
@zerkms
Aug 26 2015 22:21
но только не в момент диспетчеризации
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:21
что-то у тебя не так… у меня так в своем flux, в redux, в flummox и alt
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:22
ничего старее не нашел, есть вот https://github.com/vslinko/vstack-router
Ivan Kurnosov
@zerkms
Aug 26 2015 22:22
наверное, у меня всё вечно через ж
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:22
поменялась стора - вызвал React.render с нужными пропсами от всей аппы
Ivan Kurnosov
@zerkms
Aug 26 2015 22:24
@chicoxyzzy а откуда слушать
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:24
@zerkms оттуда где у тебя делается React.render)
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:24
я это делаю внутри App
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:25
если вызвать React.render в тот же контейнер, то это то же самое
покажи где ты тут меняешь урл
я вижу что приложение рендерится только 1 раз
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:25
тут нигде
сек
в том примере нет изменения через диспатчер, там history герерит событие по изменению ссылки
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:28
а зачем прятать роутинг внутри самой верхней компоненты?
имхо удобнее в нее передавать
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:28
привычка
Ivan Kurnosov
@zerkms
Aug 26 2015 22:28
ладно, спасибо за ссылки (но я там ничего не понял - синтаксис непривычный)
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:29
ты про es6?
есть еще такой проект http://www.kriasoft.com/react-routing/
Ivan Kurnosov
@zerkms
Aug 26 2015 22:29
про waitQueue
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:29
от Кости из скайпика
Ivan Kurnosov
@zerkms
Aug 26 2015 22:29
надо его просто уже называть "Костя"
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:29
на waitQueue не смотри, это так
он тут сидит?
Ivan Kurnosov
@zerkms
Aug 26 2015 22:29
я его в вебпаке видел
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:30
его тут нет
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:30
есть канал по вебпаку?
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:30
ага, но там много шума
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:30
вот я и думаю
слишком нишевый
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:30
я там в лурк моде сижу и никогда не читаю
и никогда не спрашиваю там ничего)
Ivan Kurnosov
@zerkms
Aug 26 2015 22:31
я сегодня в рамках зачистки вообще вышел, хоть и тоже в лурке был
router.route('/store/:name', async (state) => {
  const component = require('./components/Product');
  const data = await http.get(`/api/products/${state.params.name}`);
  return [component, data];
});
вот такой код мне не нравится
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:32
что именно?
Ivan Kurnosov
@zerkms
Aug 26 2015 22:32
роутер, который знает откуда, как и какие данные получить
для компонента
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:32
имхо это его работа
не напрямую
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:32
так даже в эмбере (но я так тоже не делаю)
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:32
но это очень удобно
путь, когда данные тянет компонент во время рендера мне не нравится
читай "мне не нравится relay"
Ivan Kurnosov
@zerkms
Aug 26 2015 22:33
почему просто не родить новое событие
которое обработают все, кто в нём заинтересован
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:34
реагировать на события событиями не айс
Ivan Kurnosov
@zerkms
Aug 26 2015 22:34
например PRODUCT_OPENED
вот
кто это сказал?
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:34
флакс
Ivan Kurnosov
@zerkms
Aug 26 2015 22:34
вот
у нас сейчас какие-то дремучие ограничения
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:34
тогда тебе в секту rx
Ivan Kurnosov
@zerkms
Aug 26 2015 22:34
которые бы развязали причины и следствия
но зато всё свалить в кучу это "удобно"
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:34
так тоже можно жить
Ivan Kurnosov
@zerkms
Aug 26 2015 22:35
да можно и жквери с ангуляром взять
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:35
события на события это как раз в тему rx
Ivan Kurnosov
@zerkms
Aug 26 2015 22:35
это естественно
это вокруг нас везде
(кроме флакса)
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:36
вроде я что-то слышал про поддержку этого в redux
Ivan Kurnosov
@zerkms
Aug 26 2015 22:37
непонятно почему бы не иметь отдельный класс листенеров, которые могут в стек класть новые события
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:37
router.route('/store/:name', async (state) => {
  const component = require('./components/Product');
  const data = await http.get(`/api/products/${state.params.name}`);
  return [component, data];
});
а дайте помотреть где это
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:37
есть еще такой проект http://www.kriasoft.com/react-routing/
Ivan Kurnosov
@zerkms
Aug 26 2015 22:37

аргументы типа "так легко получить бесконечный цикл" идут лесом, ибо

const a = () => a(); тоже легко сделать

Vyacheslav Slinko
@vslinko
Aug 26 2015 22:38
у меня в vstack идея такая же, транзишн готовит всю страницу сам
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:38
а Костя из Питера?
Ivan Kurnosov
@zerkms
Aug 26 2015 22:38

транзишн готовит всю страницу сам

это выглядит грязно

Vyacheslav Slinko
@vslinko
Aug 26 2015 22:39
да, из Питера
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:39
можно рендерить еще без данных (не везде, но у меня — да)
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:39
почему грязно?
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:39
надо питерских на GrillJS позвать
Ivan Kurnosov
@zerkms
Aug 26 2015 22:39
потому что задача роутера - роутить
а не "роутить и заботиться о данных"
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:39
rackt/redux#569
Ivan Kurnosov
@zerkms
Aug 26 2015 22:39
ага я читал
там вообще трава
PhD скоро будет нужен не только для хаскеля, но и для redux'а
(только сейчас заметил что у меня на тачке установлено две разных английских раскладки, а то вечно удивлялся чего с первого раза не переключается)
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:41

надо питерских на GrillJS позвать

а можно завалиться в питер

Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:41
ненене, там грилльЖС не выйдет)
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:41
я собираюсь поехать туда пожить ненадолго
не обязательно с гриллем :)
кстати, посмотрел плотнее фалкор
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:43
ну завалиться можно
и как он?
там же rx секта :)
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:43
есть корневое отличие от graphql+relay:
фалкор про поля, графкл про объекты целиком
меня не впечатлил
ожидал большего
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:44
короче шо то говно шо это
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:44
с get/set ясно, а вот call уже не айс
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:44
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:45
графкл с релеем гораздо естественнее имхо
все спрашивают зачем язык придумали
чтобы было очевидно
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:46
ну так селекторы ж
а то геты писать всякие
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:46
а не писать
call(
  ['todos', 'add'],
  ['text'],
  [['name'], ['length']]
)
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 22:47
да не, язык норм там
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:47
и да, в графкл у полей могут быть аргумерты, в фалкор нет
это тоже огромная особенность
{ users(sortBy: 'name', sort: 'asc', first: 10) { name, email } }
{ users(sortBy: 'name', sort: 'desc', first: 10) { name, email } }
vs
usersByName[0...10]["name", "email"]
usersByNameReverse[0...10]["name", "email"]
но тем у кого куча микросервисов, графкл меньше подходит
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:53
ну и в фалкоре нет типов
все, я смотреть mr robot и спать
Ivan Kurnosov
@zerkms
Aug 26 2015 22:56
чота везде про этот мистер-робот
Vyacheslav Slinko
@vslinko
Aug 26 2015 22:58
прикольный, но все равно смешно, когда они говорят it термины
Stanislav Termosa
@termosa
Aug 26 2015 22:59
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:00
yep
Stanislav Termosa
@termosa
Aug 26 2015 23:00
трейлер совсем слабенький ...
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:02
да, трейлер так себе
сериал про хакера нарика с социопатией и проблемами с головой
Ivan Kurnosov
@zerkms
Aug 26 2015 23:11
Кстати
про получение данных из роутера
А если придётся обработать ошибку получения данных?
Получается что в роутере сейчас уже не просто дофига, а ДОФИГА логики
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:12
я кидаю 500
ну не совсем это логика роутера
он только вызывает экшен
и ждет его завершения
Ivan Kurnosov
@zerkms
Aug 26 2015 23:12
вчера клёвую статью про монады читал
пришёл домой - пытался нагуглить, не смог
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:13
экшн сам хранится в папке flux
Ivan Kurnosov
@zerkms
Aug 26 2015 23:13
пришёл сёдня на работу - всю историю пересмотрел за вчера, не нашёл
полтергейство
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:13
бывает
Ivan Kurnosov
@zerkms
Aug 26 2015 23:14

ну не совсем это логика роутера
он только вызывает экшен

выше же была демонстрация кода и "это нормально", что роутер ничего не вызывает, но всё сам делает

Vyacheslav Slinko
@vslinko
Aug 26 2015 23:15
я помню, тебе важно расположение функции в файлах
Ivan Kurnosov
@zerkms
Aug 26 2015 23:15
не
мне важно, что мы общаемся отправкой мессаджей
или экшнов, как будет угодно
это развяжет причины и следствия
как оно физически лежит не важно
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:16

чем отличается

router.route('/store/:name', async (state) => {
  const component = require('./components/Product');
  const data = await http.get(`/api/products/${state.params.name}`);
  return [component, data];
});

от

const prepareProductPage = async (state) => {
  const component = require('./components/Product');
  const data = await http.get(`/api/products/${state.params.name}`);
  return [component, data];
}
router.route('/store/:name', prepareProductPage);
?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:16
ничем, роутер слишком много работы делает
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:17
а от
const prepareProductPageActionCreator = async (state) => {
  return dispatch => {
     const component = require('./components/Product');
     const data = await http.get(`/api/products/${state.params.name}`);
     return [component, data];
  }
}
router.route('/store/:name', () => prepareProductPage());
Ivan Kurnosov
@zerkms
Aug 26 2015 23:18
тоже
роутер не должен вызывать получение данных
он должен рождать событие
а каким образом оно будет отработано - не его проблемы
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:18
а от
const prepareProductPageActionCreator = async (state) => {
  return dispatch => {
     dispatch(loadDataForPage())
  }
}
router.route('/store/:name', () => prepareProductPage());
Ivan Kurnosov
@zerkms
Aug 26 2015 23:19
вот
а теперь отлично
но только имя дать нормальное
экшну
но ты так не сможешь сделать
потому что это диспетчеризация внутри диспетчеризации
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:19
?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:19
а рождать события во время диспетчеризации плохо TM
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:20
в redux нет
Ivan Kurnosov
@zerkms
Aug 26 2015 23:20
в redux да
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:20
это офф путь делать async ac
почему плохо?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:20
ты там их просто рождаешь асинхронно
но не рождаешь новых в процессе диспетчеризации
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:21
вот
Ivan Kurnosov
@zerkms
Aug 26 2015 23:21

почему плохо?

не знаю, вы так говорили выше

Vyacheslav Slinko
@vslinko
Aug 26 2015 23:21
во флаксе родном плохо
Ivan Kurnosov
@zerkms
Aug 26 2015 23:21
в редуксе тоже будет эксепшн
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:22
а, ты про вызов диспатчера из редюсера
да
тогда ты не прав "потому что это диспетчеризация внутри диспетчеризации"
Ivan Kurnosov
@zerkms
Aug 26 2015 23:22
я про вызов его из абстрактного обработчика
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:22
это асинхронная диспетчерезация
Ivan Kurnosov
@zerkms
Aug 26 2015 23:22
но в redux обработчики только редюсеры, так что да
нет, не асинхронная
в redux ты не можешь из "редюсера" отдиспетчить событие
асинхронная она в экшн криэйторе и с ней всё хорошо
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:24
в общем, это работает
Ivan Kurnosov
@zerkms
Aug 26 2015 23:24
из редюсера - нет
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:24
так это ж не из редюсера
Ivan Kurnosov
@zerkms
Aug 26 2015 23:25
у тебя роут меняется как следствие порождения какого-то события
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:25
это из роутера
внешнего
Ivan Kurnosov
@zerkms
Aug 26 2015 23:25
нет внешних или внутренних событий
все события у нас диспетчеризуются единым диспетчером
и смена роута - обработчик события
а из обработчика события в redux новые события генерировать нельзя
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:26

все события у нас диспетчеризуются единым диспетчером

вот тут проблема

у меня события герерирует внешняя система
Ivan Kurnosov
@zerkms
Aug 26 2015 23:27
потому что внутри одного диспетчера ты бы не смог реализовать
насколько я помню все песочили reflux из-за отсутствия единого диспетчера
и ты совершил тот же самый смертный грех
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:27
потому что "нельзя реагировать на события событиями" мы это выяснили
Sergey Rubanov
@chicoxyzzy
Aug 26 2015 23:27
я его не из-за этого песочил)
Ivan Kurnosov
@zerkms
Aug 26 2015 23:27
нельзя реагировать на события событиями ТМ
у этого "нельзя" есть рациональная составляющая?
а то я только догматическую видел пока
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:28
ты что хочешь доказать?
да, это догма
Ivan Kurnosov
@zerkms
Aug 26 2015 23:28
окей
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:28
flux решает проблему синхронизации событий
Ivan Kurnosov
@zerkms
Aug 26 2015 23:29
т.е. люди добровольно приняли иррациональное ограничение и пытаются решать проблемы, нарушая эти же самые (но рациональные уже) ограничения
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:29
в том числе твой пример с рекурсией
он ее решает вводя ограничения
Ivan Kurnosov
@zerkms
Aug 26 2015 23:29
я бы назвал это стэк
класть сообщения в стек и обрабатывать их по очереди - нормально
так работают наши компьютеры
и не взорвались ещё
хотя не стэк, там же FIFO - так что это обычная очередь
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:33
почему store должен генерировать события?
почему ac не может генерировать несколько событий?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:33

почему store должен генерировать события?

strore не должен. Но почему их не должен генерировать обработчик событий?

Vyacheslav Slinko
@vslinko
Aug 26 2015 23:33
dispatcher?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:33

почему ac не может генерировать несколько событий?

Может (и это к делу не относится)

диспетчер - это диспетчер
диспетчер роутит сообщения обработчикам
некоторые обработчики сторы
некоторые - нет
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:34
зачем тебе флакс?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:34
любому приложению нужен какой-то архитектурный паттерн в основу
мне нравится идея flux в его unidirectional data flow
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:35
разве обработчики герерирующие события не ломает unidirectional?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:35
нет конечно
новое сообщение проходит весь цикл точно так же
через диспетчер
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:36
тогда почему тебе не отправлять их асинхронно?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:36
откуда?
диспетчеризовать во время диспетчеризации "нельзя"
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:36
из обработчика
setTimeout(, 0)
Ivan Kurnosov
@zerkms
Aug 26 2015 23:37
это техническое иррациональное ограничение реализации
ну я к этому уже готов да
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:37
рациональное, смотри
у тебя 10 обработчиков
Ivan Kurnosov
@zerkms
Aug 26 2015 23:37
окей
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:37
каждый из них герерит новое событие
Ivan Kurnosov
@zerkms
Aug 26 2015 23:37
окей
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:37
синхронно
Ivan Kurnosov
@zerkms
Aug 26 2015 23:37
окей
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:37
в каком порядке их выполнять?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:38
слава богу JS у нас однопоточный
события в рантайме у нас происходят в строгом порядке
потому выполнять их в порядке помещения в очередь
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:38
так проблема в том, что это порядок регистрации их в системе
dispatcher.register
forEach
Ivan Kurnosov
@zerkms
Aug 26 2015 23:39
это не проблема - обработчики получают сообщение по порядку
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:39
по какому?
кто его задает?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:39
это не важно уже
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:39
очень важно
Ivan Kurnosov
@zerkms
Aug 26 2015 23:39
допустим, это порядок их добавления
если они у тебя зависят друг от друга - то это твоя обязанность поддержать порядок
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:39
почему события первого обработчика важнее события второго?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:39
не знаю, это твой юзерленд код
который делает их важнее
паттерну пофиг
the observer pattern существует уже столько лет, что уже даже не смешно обсуждать детали его реализации
смотри - комьюнити вроде как приняло, что рождать события из UI нормально
затем, стало очевидно, что UI это частный случай обработчика
и ещё есть куча всяких других источников сигнала
например, ws
который подключен tcp сокетом к удалённому серверу
внимание вопрос: чем технически ws листенер отличается от event листенера?
оба получают сообщения из какой-то абстрактной очереди сообщений
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:44
ничем
Ivan Kurnosov
@zerkms
Aug 26 2015 23:44
вот
почему из ws генерить сообщение нормально
а из сферического обработчика - нет
?
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:44
как это связанно с циклом дипетчеризации?
потому что они вне цикла
=> гарантируется очередь by default
а не "сам рули"
Ivan Kurnosov
@zerkms
Aug 26 2015 23:45
не гарантируется
если ты сообщения производишь асинхронно
то там как повезёт
так что "сам рули" в силе
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:45
js однопоточный
сам сказал
Ivan Kurnosov
@zerkms
Aug 26 2015 23:45
так точно
многопоточность !============ асинхронность
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:46
гарантируется очередь в момент диспетчерезации
Ivan Kurnosov
@zerkms
Aug 26 2015 23:46
setTimeout(dispatch_event_1, 9); из другого `setTimeout(dispatch_event_2, 8);
This message was deleted
порядок консистентен
упс
хотел отредактировать, случайно удалил
где анду блеать :-D
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:49
если обработчик dispatch_event_1 сделает setTimeout(dispatch_event_3, 0)?
Ivan Kurnosov
@zerkms
Aug 26 2015 23:50
мы абсолютно то же самое уже имеем сейчас
и тебя это не напрягает
сейчас ты можешь асинхронно родить несколько сообщений, порядок которых определён случаем
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:50
ключевое слово асинхронно
Ivan Kurnosov
@zerkms
Aug 26 2015 23:50
ключевое слово "гарантии"
гарантий уже нет (по твоей версии)
я просто не совсем понимаю таких вещей как "давайте ограничим людей от эдж кейсов которые они сами добровольно хотят реализовать"
Vyacheslav Slinko
@vslinko
Aug 26 2015 23:59
я все равно не понимаю, что ты пытаешься объяснить?
что это ограничение искуственно? да
что оно безполезное? нет, оно решает конкретную задачу
что оно не нужно? те, кому оно мешает, могут использовать другие архитектуры