@scala_ru

Страница 1346 из 1499
Nick
14.03.2018
14:55:50
val task: Stream[F, Unit] = for { taskId <- Stream.eval[F, TaskId](api.azaza()) status <- scheduler.retry[F, StatusResponse](api.status(taskId), 3 seconds, d => d.plus(3 seconds), 30, { case NonFatal(ex) => logger.warn(s"Status ${ex.getMessage}") true }) _ <- Stream.eval[F, ResultResponse](api.result(taskId)) } yield { println(status) }

так вот, azaza возвращает F[_] (в данном случае IO]

Alexey
14.03.2018
14:56:53
when(api.status(any()).thenAnswer(_ => IO.pure(Status))

yaroslav
14.03.2018
14:57:03
а тебе стримы нужны ради ретраев?

Google
Nick
14.03.2018
14:57:27
when(api.status(any()).thenAnswer(_ => IO.pure(Status))
все правильно, но ток thenReturn

Alexey
14.03.2018
14:57:40
Ну так ты каждый раз вернёшь новый IO

Nick
14.03.2018
14:57:44
и след thenReturn не сработает, потому что будет переиспользоваться IO

api.status вызовется 1 разик бро)

Alexey
14.03.2018
14:58:06
Ну дык thenAnswer?

Denis
14.03.2018
14:58:16
Alexey
14.03.2018
14:58:25
Nick
14.03.2018
14:58:38
Схерали?
ну иди посмотри))))

Denis
14.03.2018
14:58:40
etry[F, StatusResponse](api.status(taskId), ...)

только один раз

потому что нет смысла несколько раз вызывать

так как никаких сайд эффектов нет

Alexey
14.03.2018
14:59:25
Тааак, а что он тогда ретрает?

Google
Denis
14.03.2018
15:00:06
выполнение

IO

IO[A] - описывает действия

выполнить действия по одному и тому же описанию можно сколько кгодно раз

Nick
14.03.2018
15:01:07
Денис молодец

Denis
14.03.2018
15:01:47
IO(println("1234")).flatMap(_ => IO(println("1234"))) это тоже самое что val a = IO(println("1234")); a.flatMap(_ => a)

Nick
14.03.2018
15:01:52
Понимает

Denis
14.03.2018
15:01:53
чего нельзя сказать про Future

scheduler.retry какие ограничения на F[_] накладывает?

Nick
14.03.2018
15:04:56
scheduler.retry какие ограничения на F[_] накладывает?
Да, должен быть инстанс Effect вроде , надо глянуть

Alexey
14.03.2018
15:04:59
Ясн, я подумал, что IO одноразовые

Nick
14.03.2018
15:05:39
Ну зачем ты так

Oleg
14.03.2018
15:06:26
Ясн, я подумал, что IO одноразовые
на всякий случай, почти никакие ленивые таски, включая моникс и скалаз не одноразовые по дефолту

Denis
14.03.2018
15:06:41
какое ты хочешь поведение от api.status? у тебя же IO в руках, значит можно что угодно сделать

Alexey
14.03.2018
15:07:55
какое ты хочешь поведение от api.status? у тебя же IO в руках, значит можно что угодно сделать
+ можно просто FSM сделать если надо для разных вызовов сделать разное поведение внутри IO

Oleg
14.03.2018
15:08:00
т.к. одноразовость явно противоречит referential transparency

Nick
14.03.2018
15:10:19
Denis
14.03.2018
15:11:30
ну ты можешь тупо сделать через AtomicInt какой нибудь

Denis
14.03.2018
15:12:55
def foo: IO[A] = { val i = AtomicInt(0) IO.defer { if (i.incrementAndGet < 3) IO.raiseError(lol) else IO(a) } }

Google
Denis
14.03.2018
15:13:17
хочешь прям совсем красиво прикрути MVar

Oleg
14.03.2018
15:13:33
а в скалаз будет IORef кекек

Denis
14.03.2018
15:13:37
но как бы тебе нужен IO с памятю вне этого IO

Nick
14.03.2018
15:26:21
на самм деле я думаю, можно замокать runAsync

но .when(io.runAsync(any[Either[Throwable,StatusResponse]=>IO[Unit]]())) не работает)

@eld0727 предложи вариант лучше)

Nick
14.03.2018
15:29:48
ну блин, мой перфекционизм все портит)

Denis
14.03.2018
15:30:07
какой перфекционизм если ты юзаешь мокито

Alexey
14.03.2018
15:30:11
Ты хочешь стейт без стейта

Oleg
14.03.2018
15:30:36
@eld0727 предложи вариант лучше)
Я воспользуюсь методом ответить, не читая истории, А может сделать свой эффект с Async и liftIO, тогда и мокать не придётся?

Denis
14.03.2018
15:30:53
IO :)

Alexey
14.03.2018
15:32:12
Ну ты всё равно же будешь где то хранить, что ты сделал N вызовов

Nick
14.03.2018
15:32:20
Ты хочешь стейт без стейта
на самом деле не совсем так, мокито то имеет стейт)

не я, а мокито

сам ж сказал что thenReturn можно несколько раз юзать)

Google
Denis
14.03.2018
15:33:10
I'm outta here

Nick
14.03.2018
15:38:32
I'm outta here
уговорил, так и сделал

Р
14.03.2018
16:50:31
Мне кажется или в Scala 2.12 вывод типа параметра у анонимной функции стал работать лучше? Типа теперь во многих местах вместо object.method { parameter: Type => ... } можно писать просто object.method { parameter => ... }

Admin
ERROR: S client not available

Alexander
14.03.2018
18:25:20
Viacheslav
14.03.2018
19:59:22
Пацаны ваще финчята! Подскажите плиз, как подружить скалячью или твитерячью фьчу с финч эндпоинтом? Код val executeJob: Endpoint[JobId] = post("executeJob" :: jsonBody[AppParams]) { params: AppParams => val result: Future[JobId] = ... чо делать с result? Как Ok послать? }

Viacheslav
14.03.2018
20:07:29
я конвертнул

теперь мне надо Ok вернуть

у меня есть Ок у меня есть фьюча с результатом

Daniel
14.03.2018
20:08:01
там же есть пример, возвращай

val e = get("foo") { Future.successful(Ok("bar")) }

Viacheslav
14.03.2018
20:10:21
то есть я могу сделать так? val executeJob: Endpoint[JobId] = post("executeJob" :: jsonBody[AppParams]) { params: AppParams => val result: Future[JobId] = ... result.map(Ok("беззаговорочный успех")) }

Daniel
14.03.2018
20:10:44
да

Viacheslav
14.03.2018
20:10:48
спрашивается зачем спрашивать когда можно проверить)

вобщем спасиб)

Daniel
14.03.2018
20:10:54
just do it

Viacheslav
14.03.2018
20:11:58
просто из сигнатуры метода нифига не понятно что эндпоинт умеет работать с фьючами и это заставляет копаться в документации

Google
Daniel
14.03.2018
20:12:57
запили правки в доку) там только рады будут 2.5 мейнтейнера

Andrey
15.03.2018
05:52:48
А что, {implicit param: SomeType => foo()} foo(...)(implicit param: SomeType ) = ... implicit параметр в теле функции подхватывается как implicit val?

Юрий
15.03.2018
05:58:40
оформи код как код, непонятно ничего

Oleg
15.03.2018
06:00:55
Но как stable reference, как минимум

в этом же их и суть, имплиситов этих - получил, попользовался - передай другому внутрь

Andrey
15.03.2018
06:05:12
А если параметорм будет функция, скала сделает преобразование типов при необходимости?

Oleg
15.03.2018
06:06:32
хвала небесам, это намереваются выпилить

Alexei
15.03.2018
06:10:11
по производительности большое проседание , встречал кто цифры ?
У нас в 2-3 раза общая производительность с Kamon упала. Выбросили. Правда, это 3 года назад было. Может, сейчас получше уже.

Alexey
15.03.2018
06:16:24
Вот интересно, а лайтбендовский мониторинг насколько просаживает производительность ?

Alexei
15.03.2018
06:29:43
А зачем вы агент использовали?
Думали по-быстрому заиметь метрики внутренностей Акки для перформанс-тестирования и получили совсем ужасные результаты. В итоге понаписывали собственных велосипедов на базе Scala Metrics / Dropwizard - где-то напрямую в коде, где-то через наследование и aroundReceive()

Юрий
15.03.2018
06:46:33
Народ, а вот насчет камона. В дропвизарде можно метрики строить иерархично - делаешь Registry и вкладываешь друг в друга. И имя метрики строится также иерархично. В камоне я чёт такого не вижу. Там так можно? Или все метрики там идут как top level?

Страница 1346 из 1499