Rinat
по бенчам они якобы перформтя лучше и расширяют возвможности несоклько
Rinat
стал юзать сам блюберд
Igor
бенчи 😂🙈
Sergey
по бенчам они якобы перформтя лучше и расширяют возвможности несоклько
бенчи не нужны! ибо не отражают сути да и какая разницы 2 или 5мс уходит на выполнение промиса в асинхронных запросах к серверу?
Дима
Промисов может быть ппц как много
Дима
Но юзаю я его не из-за скорости
Igor
про бенчи был отличный доклад на HolyJS
Дима
bluebird здоровый, но при этом экономит как моё время, так и повышает читабельность кода
Anonymous
Это цепочка абсолютно синхронных колбэков. Промисами и async/await я пользоваться умею. Суть в том, что у меня есть произвольное число обработчиков, каждый из которых передаёт результат следующему.
Rinat
мотивам*
Leo
можно вебпаком убирать ненужные функции из блюберда
Дима
Просто сравните два решения выше и решите, какое из них проще поддерживать)
Андрей
Хорошо, что промисы отлично полифилятся. Если они окажутся слабым местом, то можно заполифилить блюбёрдом.
Gordey
синхронный колбек хелл
Leo
а так в блюберде куча полезностей, таких как cancel, timeout, delay, finally, promisify, map, try, method
Leo
эти часто юзаю
Nikolay
props еще
Anonymous
Ок, просто массив синхронных функций.
Leo
да, он тоже
Дима
Да вообще много всего, когда напишешь все обертки к каждому полезному методу, там размер bluebird и получится
Dmitriy
reduce
Dmitriy
Ок, просто массив синхронных функций.
Brs
еще catch ошибок определенного типа тоже норм
Андрей
хм. а есть нормальные примерчики трюков с блюбёрдом по руцке ?
Anonymous
[ ... ].reduce( (body, iteration) => iteration(body), reportBody );
Sergey
pipe/compose в помощь
во это решение, да
Nikolay
Ну в общем случае редьюс, да
Андрей
в лодаше есть ещё chain но это не про этот кейс )
Дима
Ок, просто массив синхронных функций.
Если у тебя просто фактически fn3( fn2( fn1( data ) ) ) то это pipe, а не колбеки
Nikolay
Колбеки вообще вредно синхронными делать.
Дима
Вот. Да.
https://github.com/zerobias/ensue 😏
Дима
Это обёртка над ramda, но именно для такого кейса — чтобы сделать массив функций и просто кинуть их все сразу
Дима
Рамду выпилю как руки дойдут до перф. тестов
Nikolay
Вроде в рамде чета штатное было для подобных кейсов, не?
Дима
Да, pipe
Nikolay
Не, именно для массива фций любой длины.
Дима
Не, sequence там представлен pipe, pipeK, pipeP и такими же compose
Anonymous
Я так полагаю, мне нужно почитать про потоки? =)
Дима
Везде нужно передавать каждую функцию в отдельном аргументе
Дима
Что жутко бесило)
Дима
Для массива функций там есть методы, описываемые общей фразой "примени этот список функций разом к"
Nikolay
Блеа, я точно как-то делал, не используя императивный код, но щас уже и не вспомню.
Anonymous
Ну, короче, я пока обойдусь reduce()
Dinis
/stat@combot
Anonymous
Главное — получается предсказуемо и, в итоге, тестируемо.
Дима
Я зря чтоль тесты писал 😢
Nikolay
R.tap(console.log) наше все :))
Дима
Эт да))
Anonymous
Эта... А слишком много абстракций — это плохо?
Nikolay
Слишком много чего угодно это плохо.
Дима
Отвечает господин Ассемблер
Дима
Плохая абстракция хуже чем никакой абстракции, но хорошая абстракция упрощает код и значительно экономит время и силы
Anonymous
Суть в том, что мы используем одну абстракцию над запросами в эластик. Но над ней пришлось внедрить ещё два уровня абстракции. Получается очень круто и удобно снаружи, но мозги заворачиваются сделать обратный анализ.
Андрей
Anonymous
Первая абстракция — криэйторы фильтров и агрегаций (очень похоже на экшн-криэйторы в Redux), а вторая — чейнинг применения условий.
Дима
Ну тут норм вообще, так и надо
Anonymous
Есть опасения, что тем, кто придёт в проект, будет печалька.
Дима
fn3(fn2(fn1(data))) vs [ fn1, fn2, fn3 ]
Дима
Есть опасения, что тем, кто придёт в проект, будет печалька.
А нет опасений что проект рухнет потому что инвестор разорится раньше, чем фронт протестирует всю рамду и bluebird? 😄
Anonymous
Там чейнинг не везде очевидный. Есть, например, чейнинг создания функций, которому на вход нужно посылать инвертированный массив.
Anonymous
Я пока придумал это, голову сломал.
Vlad
можно руками написать для ноуд апи const pify = fn => (...args) => new Promise((resolve, reject) => { fn(...args, (err, res) => { (err) ? reject(err) : resolve(res); }) });
Sergey
жаль в api самой ноды не добавят поддержку промисов
Anonymous
жаль в api самой ноды не добавят поддержку промисов
Пардон, а какая разница, в каком они API?
Дима
Большая
Дима
Вместо колбеков можно просто писать await readFile
Sergey
ну или хотя бы readFile(‘name.sss’).then()
Vlad
Пардон, а какая разница, в каком они API?
раз промисы first class citizen, то апи должно поддерживать этот интерфейс тоже
Vlad
плюс новичкам проще будет с async/await + promise-based api, чем с коллбеками
Sergey
и скорее всего если сделать ПР то отвергнут
Safort
Так они всё ещё не определились добавлять или нет обещания в API?