@frp_ru

Страница 132 из 420
? animufag ?
09.08.2017
23:21:24
так то в джс можно сделать concat для списков который будет складывать списки ну и как будто сделал инстанс

andretshurotshka?❄️кде
10.08.2017
06:54:42
https://github.com/Termina1/tlhydra/tree/rewrite

Google
Gleb
10.08.2017
09:44:18
Привет есть ли возмжность по изящней тестировать rx код чем вырвиглазные marbles тесты

Тем более как вообще можно изобразить с их помощью например retryWhen

Поделитесь кто как тестирует rx код пожалуйста

Denis
10.08.2017
09:46:47
вот тут Саша написал как-то http://www.mostovenko.com/posts/2016-05-21-testing-with-rxjs.html

Gleb
10.08.2017
09:46:57
Нукась

А ну да вот эта статья попадался но тогда получается весь код надо дробить на очень маленькие функции а не цепочки из чейнов

https://mikebridge.github.io/articles/typescript-redux-observable-epic-test/ Вот в целом пока самый подходящий

Evgeny
10.08.2017
12:30:21
Господа, нужен совет. Есть жсный проект в умеренно функциональном стиле. То есть что-то в таком духе: // :: String -> String -> SomeThing -> Maybe Stuff const foo = curry((x, y, z) => ...) // :: String -> Stuff -> Maybe OtherStuff const bar = curry((x, y) => ...) // :: SomeThing -> Maybe OtherStuff const baz = compose( chain(bar('something')), foo('blah', 'blah') ) ramda, point-free стиль в меру, несложные монадки. И есть желание всё это дело затипизировать по-человечески на flow либо ts Собственно, вопрос: какие функциональные либы лучше всего дружат с flow или ts?

illiatshurotshka❄️
10.08.2017
12:31:25
есть тайпинги для рамды

в тс

Evgeny
10.08.2017
12:33:45
то есть оно даже какой-нибудь assocPath без проблем переварит?

Я в этом плане несколько отстал от жизни, когда в последний раз смотрел, всё было не очень

Тут, кажется, недавно хвалили https://github.com/hallettj/safety-lens и ещё что-то

Google
Denis
10.08.2017
12:37:13
Тут, кажется, недавно хвалили https://github.com/hallettj/safety-lens и ещё что-то
из всего этого я буду хвалить только https://www.stackage.org/lts-9.0/package/lens-4.15.3

Evgeny
10.08.2017
12:39:14
из всего этого я буду хвалить только https://www.stackage.org/lts-9.0/package/lens-4.15.3
Это понятно, но у меня тут жс ? Кстати, рассматривали вариант написать некоторые куски на purescript, но в итоге не решились

Denis
10.08.2017
12:47:15
https://gist.github.com/developit/7a6e48654b88002a835f8f6bc4535a6d#gistcomment-1902744

https://github.com/gcanti/fp-ts-fluture

Evgeny
10.08.2017
13:10:00
Спасибо, буду смотреть

Gleb
10.08.2017
13:54:48
Как правильно протестировать данный кусок кода подскажите пожалуйста action$ .ofType(types.AUTH_LOG_IN) .take(1) .flatMap(() => Observable .interval(token.accessTokenExpiredTime()) .flatMap(() => token.refreshToken(token.getRefreshToken)) .mapTo({ type: REFRESH_TOKEN_UPDATED }) ); Это ведь по факту бесконечно

Denis
10.08.2017
14:04:37
flatMap замени на mergeMapTo и тогда лямбды не будет ни у mapTo то же не надо, можно тогда resultSelector у mergeMap взять

Gleb
10.08.2017
14:04:59
Точняякк

Спасибо!

Denis
10.08.2017
14:05:31
у mergeMapTo тоже есть селектор

mergeMapTo(Observable.interval(token.accessTokenExpiredTime()).mergeMapTo(token.refreshToken(token.getRefreshToken)), (_, _) => ({type: REFRESH_TOKEN_UPDATED}))) как-то так

хотя даже можно как-то убрать все эти mergeMap через mergeScan

Gleb
10.08.2017
14:10:03
Большое спасибо!

Evgeny
10.08.2017
14:33:26
А кто-нибудь имел дело с https://github.com/gcanti/flow-static-land?

Gleb
10.08.2017
14:53:59
А можно ли как нибудь retryWhen заставлять предыдущий оператор выполнять но с изменениями

Gleb
10.08.2017
14:54:47
action$ .ofType(types.HTTP_REQUEST) .map((action: HttpRequestAction) => action.payload) .mergeMap(({ request, actionTypes, key, args, injectLoader }) => fetchApi(request) .mergeMap((response: AjaxResponse) => [ ... ]) .takeUntil(action$.ofType(actionTypes.CANCEL)) .retryWhen(tokenExpired) .catch((error: AjaxError) => [ ... ]) ); В частности вот тут tokenExpired сделает запрос и получит токен, хочется запроса уже делать с новым токеном

Ну то есть retryWhen повторит fetchApi(request) с теми же хедерами что и до tokenExpired которая обновит токен

А хотелось бы с токеном ее вызывать уже сполученным

Denis
10.08.2017
14:55:53
tokenExpired что тут?

Google
Gleb
10.08.2017
14:56:19
export const tokenExpired = err$ => err$ .switchMap((e: AjaxError) => { if (e.status === 401 && token.tokensExpired()) { return Observable.fromPromise(token.refreshToken()); } throw e }) .take(3);

token.refreshToken() обычный fetch который положит в сторедж токен

fetchApi ходит в стредж перед запросом, но при retryWhen он уже передан старый

Denis
10.08.2017
14:58:10
ну сделай чтобы эта дрянь перезапускалась через какой-нибудь Observable.defer(() => tokenExpired) но я бы нахер выкинул это говно под названием fetch если у меня есть Observable.ajax

Gleb
10.08.2017
14:58:53
Хорошо предположим я выкину гавно fetch, так я смогу серджить себе токен?

fetchApi(request) - это Observable.ajax, только конфигуриреумый данными из action

Denis
10.08.2017
15:00:23
ну можешь сделать через defer тогда каждый раз будет перезапускаться Observable

типа из hot -> warm

andretshurotshka?❄️кде
11.08.2017
23:26:32
?

255 members

int overflow

illiatshurotshka❄️
13.08.2017
21:03:14
зачем суффиксовать долларом?

kana
13.08.2017
21:03:43
Конвеншн, чтобы сразу видеть, что стрим а что нет, аналогично как предикаты часто заканчивают знаком вопроса, а функции с эффектом бэнгом

Дмитрий
13.08.2017
21:11:21
Я привык обозначать стримы в типе, а не в имени ?

Сергей
14.08.2017
18:05:41
Vadim
14.08.2017
18:09:06
Первый раз слышу про такую конвенцию.

Vadim
14.08.2017
18:09:16
тогда ок

Google
Сергей
14.08.2017
18:09:22
active? vs isActive()

Denis
14.08.2017
18:09:26
где такая ебанина про !?

Сергей
14.08.2017
18:09:39
update! vs updateAndSave()

Denis
14.08.2017
18:09:54
а руби, язык всплош пронизан хуйней и сайдэффектами

illiatshurotshka❄️
14.08.2017
18:10:09
в руби ! для мутации

Admin
ERROR: S client not available

Сергей
14.08.2017
18:10:13
но ! ? очень круто

illiatshurotshka❄️
14.08.2017
18:10:13
только для нее

Сергей
14.08.2017
18:10:27
только для нее
да там на стд библиотеку посмотри

Denis
14.08.2017
18:10:28
из динамики только питончик достоен уважения

illiatshurotshka❄️
14.08.2017
18:10:39
да там на стд библиотеку посмотри
там только для нее они и используются

illiatshurotshka❄️
14.08.2017
18:10:58
str = str.strip == str.strip!

Сергей
14.08.2017
18:11:40
str = str.strip == str.strip!
я как-то просматривал стандартную библиотеку и несколько раз натыкался на методы без бэнга но мутирующие исходные данные

посмотри

убедишься

illiatshurotshka❄️
14.08.2017
18:12:02
если нет не мутирующего эквивалента

Google
Denis
14.08.2017
18:12:23
рористы не программисты))

illiatshurotshka❄️
14.08.2017
18:12:37
methods only have bangs where a safer alternative exists in the core lib

рористы не программисты))
я пишу короткие скрипты на руби

намного лучше чем на питоне/баше

? animufag ?
14.08.2017
18:13:59
safer alternative это как strong typing

баш чему угодно проигрывает. питона обычно хватает

не думаю что есть вещи где руби/питон сильно между собой выигрывают

illiatshurotshka❄️
14.08.2017
18:16:28
на руби быстрее писать

? animufag ?
14.08.2017
18:16:36
спорно

illiatshurotshka❄️
14.08.2017
18:16:38
ага

? animufag ?
14.08.2017
18:17:09
я могу сказать, что на питоне я не пишу бегин/энд. вроде бы так быстрее

andretshurotshka?❄️кде
14.08.2017
18:19:04
лол

? animufag ?
14.08.2017
18:19:55
помню пару раз у меня была задача сделать штуку которая бы общалась с cli (читала, stdout, кидала stdin) и в обще это было сложновато на питоне

думаю на руби также

kana
14.08.2017
18:21:42
У него этл часто, он же хаскель-фашист

очередное необоснованное мнение

А вообще я это из лиспов взял, а точней из кложи

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

Страница 132 из 420