
Никита
29.11.2016
13:35:49

Andrey
29.11.2016
13:35:52
Хорошо, что промисы отлично полифилятся. Если они окажутся слабым местом, то можно заполифилить блюбёрдом.

Gordey
29.11.2016
13:36:28
синхронный колбек хелл

Leonid
29.11.2016
13:36:37
а так в блюберде куча полезностей, таких как cancel, timeout, delay, finally, promisify, map, try, method

Google

Leonid
29.11.2016
13:36:46
эти часто юзаю

Nikolay
29.11.2016
13:36:57
props еще

Котяй Негодяй
29.11.2016
13:37:09

Leonid
29.11.2016
13:37:10
да, он тоже

Дмитрий
29.11.2016
13:37:26
Да вообще много всего, когда напишешь все обертки к каждому полезному методу, там размер bluebird и получится

Addicted
29.11.2016
13:37:28

Никита
29.11.2016
13:37:42

Dmitriy
29.11.2016
13:37:49
reduce
Ок, просто массив синхронных функций.

Nikolay
29.11.2016
13:37:49

Brs
29.11.2016
13:37:52
еще catch ошибок определенного типа тоже норм

Andrey
29.11.2016
13:37:52
хм. а есть нормальные примерчики трюков с блюбёрдом по руцке ?

Котяй Негодяй
29.11.2016
13:37:53
[ ... ].reduce(
(body, iteration) => iteration(body),
reportBody
);

Google

Сергей
29.11.2016
13:38:04

Nikolay
29.11.2016
13:38:04
Ну в общем случае редьюс, да

Andrey
29.11.2016
13:38:46
в лодаше есть ещё chain но это не про этот кейс )

Дмитрий
29.11.2016
13:38:48

Котяй Негодяй
29.11.2016
13:39:09

Nikolay
29.11.2016
13:39:24
Колбеки вообще вредно синхронными делать.

Дмитрий
29.11.2016
13:39:35
Вот. Да.
https://github.com/zerobias/ensue
?
Это обёртка над ramda, но именно для такого кейса — чтобы сделать массив функций и просто кинуть их все сразу
Рамду выпилю как руки дойдут до перф. тестов

Nikolay
29.11.2016
13:41:30
Вроде в рамде чета штатное было для подобных кейсов, не?

Дмитрий
29.11.2016
13:41:45
Да, pipe

Nikolay
29.11.2016
13:42:11
Не, именно для массива фций любой длины.

Дмитрий
29.11.2016
13:43:08
Не, sequence там представлен pipe, pipeK, pipeP и такими же compose

Котяй Негодяй
29.11.2016
13:43:30
Я так полагаю, мне нужно почитать про потоки? =)

Дмитрий
29.11.2016
13:43:39
Везде нужно передавать каждую функцию в отдельном аргументе
Что жутко бесило)
Для массива функций там есть методы, описываемые общей фразой "примени этот список функций разом к"

Nikolay
29.11.2016
13:45:10
Блеа, я точно как-то делал, не используя императивный код, но щас уже и не вспомню.

Котяй Негодяй
29.11.2016
13:45:27
Ну, короче, я пока обойдусь reduce()

Динис
29.11.2016
13:46:56
/stat@combot

Google

Котяй Негодяй
29.11.2016
13:47:03
Главное — получается предсказуемо и, в итоге, тестируемо.

Дмитрий
29.11.2016
13:47:47
Я зря чтоль тесты писал ?

Nikolay
29.11.2016
13:47:51
R.tap(console.log) наше все :))

Дмитрий
29.11.2016
13:48:08
Эт да))

Котяй Негодяй
29.11.2016
13:48:19
Эта... А слишком много абстракций — это плохо?

Nikolay
29.11.2016
13:48:35
Слишком много чего угодно это плохо.

Дмитрий
29.11.2016
13:48:52
Отвечает господин Ассемблер
Плохая абстракция хуже чем никакой абстракции, но хорошая абстракция упрощает код и значительно экономит время и силы

Котяй Негодяй
29.11.2016
13:50:43
Суть в том, что мы используем одну абстракцию над запросами в эластик. Но над ней пришлось внедрить ещё два уровня абстракции. Получается очень круто и удобно снаружи, но мозги заворачиваются сделать обратный анализ.
Первая абстракция — криэйторы фильтров и агрегаций (очень похоже на экшн-криэйторы в Redux), а вторая — чейнинг применения условий.

Дмитрий
29.11.2016
13:52:12
Ну тут норм вообще, так и надо

Котяй Негодяй
29.11.2016
13:52:29
Есть опасения, что тем, кто придёт в проект, будет печалька.

Дмитрий
29.11.2016
13:52:56
fn3(fn2(fn1(data))) vs [ fn1, fn2, fn3 ]

Котяй Негодяй
29.11.2016
13:53:56
Там чейнинг не везде очевидный. Есть, например, чейнинг создания функций, которому на вход нужно посылать инвертированный массив.
Я пока придумал это, голову сломал.

Дмитрий
29.11.2016
13:54:52

Vladimir
29.11.2016
13:56:20
Промисифай мы пока ещё не впилили же.
можно руками написать для ноуд апи
const pify = fn => (...args) => new Promise((resolve, reject) => {
fn(...args, (err, res) => {
(err) ? reject(err) : resolve(res);
})
});

Сергей
29.11.2016
13:58:29
жаль в api самой ноды не добавят поддержку промисов

Google

Котяй Негодяй
29.11.2016
14:06:59

Дмитрий
29.11.2016
14:07:05
Большая

Сергей
29.11.2016
14:07:16

Дмитрий
29.11.2016
14:07:23
Вместо колбеков можно просто писать await readFile

Сергей
29.11.2016
14:07:52
ну или хотя бы readFile(‘name.sss’).then()

Vladimir
29.11.2016
14:08:24
плюс новичкам проще будет с async/await + promise-based api, чем с коллбеками

Admin
ERROR: S client not available

Сергей
29.11.2016
14:09:30
и скорее всего если сделать ПР то отвергнут

Safort
29.11.2016
14:09:58
Так они всё ещё не определились добавлять или нет обещания в API?

Vladimir
29.11.2016
14:10:12
обещания, лол

Vitaliy
29.11.2016
14:10:19
не согласен (с тем, что поддержки промисов не будет в апи). вон, даже браузерные апи переезжают на промисы. взять тот же fetch()

Vladimir
29.11.2016
14:10:33

Сергей
29.11.2016
14:10:46

Vladimir
29.11.2016
14:10:55

Сергей
29.11.2016
14:11:32
да сломается немного апи
но в 8 версии могут сделать

Google

Safort
29.11.2016
14:12:09
их добавить слишком сложно
А в чём именно проблема? Они же могут ломать обратную совместимость. Ну, или можно под спец. флагом менять API на новое.

Vladimir
29.11.2016
14:13:01
ты читал тот пр?

Котяй Негодяй
29.11.2016
14:13:13

Vladimir
29.11.2016
14:13:44
пост-мортем дебаг одна из главных проблем

Сергей
29.11.2016
14:14:26

Safort
29.11.2016
14:14:49

Vladimir
29.11.2016
14:15:27
некоротые модули как сервер, стримы и сервер не поддерживают модель "без коллбека возвращать промис"
ну и сегодня ты не успеешь его дочитать
там на пару часов
потом также нужно избежать перф нагрузки для коллбек потребителей

Никита
29.11.2016
14:16:34
Промисифай нужен для начала

Vladimir
29.11.2016
14:16:47

Никита
29.11.2016
14:17:02
Где?

Сергей
29.11.2016
14:17:11

Vladimir
29.11.2016
14:17:51

Сергей
29.11.2016
14:18:35
вообще не ответил на вопрос
ну ладно