问题标签 [zio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 使用 ZIO Actors 创建两个执行基本乒乓通信的 Actor
我是演员的新手,并尝试使用类型层次结构和有状态实例来执行简单的乒乓球示例。我完全按照 zio 演员 [微型网站][1] 对程序代码进行了一些更新。我在./src/main/resources/application.conf的配置文件 如下所示:
和MyApp.scala:
我不确定我是否正确更新了代码,这是我运行代码时得到的
任何帮助![1]:https ://zio.github.io/zio-actors/docs/usecases/usecases_pingpong
scala - ZStream 忽略并行操作,而是按顺序执行
以下代码应该putStrLn
并行执行效果,因为mapMPar
:
但实际上无论如何它总是foo
先处理。bar
我错过了什么还是一个错误?
scala - ZIO [声明式] 事务管理
我花了很多时间来弄清楚我原本运行良好的项目的交易ZIO+HTTP4S+Doobie
。如何进行适当的 [声明性] 事务管理?类似 Spring 的东西@Transactional
。我从-transactional-to-type-safe-reasonable-transactions阅读了这篇非常好的帖子,但具有讽刺意味的是,它确实有所谓的 Spring 挑战,即混淆交易的精确处理方式/位置:)
还尝试了tranzactio,甚至输入了一个问题在问题下,我的 PR(在我的 fork 上)似乎表明单个transact
调用被分组在一个事务中?!
在 ZIO 引用列表中的 bootzooka中,我不明白为什么资源在 main 中只“使用”一次,然后transact
围绕逻辑被调用。好吧,我理解它为什么起作用,但是当第一个 ZIO-effekt 中的错误可以让我控制第二个平面映射效果发生的情况时,我没有看到任何“策略”或其他任何让我处理的东西......
或者如何确保 HTTP4S 请求会发生单个事务。
或者一个错误处理程序,它@RequiresNew
可以在数据库中的某处实际存储有关错误的信息,即使所有先前的逻辑都正确回滚。
我不介意写一些关于这个的东西来帮助别人,但我显然还有更多要学的东西。关于 Doobie 和 ZLayers 等等。
如果我在这里明显遗漏了什么,请告诉我:-)
scala - throttleShape 的参数是什么意思?
zio-streams 提供了throttleShape
哪些
我正在努力理解这些参数unit
是如何被使用的duration
burst
。costFun
从我对令牌桶的阅读中
表示处理一个元素需要一个令牌(costFun = _ => 1
),并且unit = 1
一秒( )后补充一个令牌( duration = 1.second
)。然而,我对各种值的实验似乎并没有导致任何节流,除了
这使它挂起。例如,如何解释以下使用无限持续时间的片段(来自 PR)中的节流
具体来说,假设我想每分钟最多处理 100 个元素,那么应该如何throttleShape
指定呢?
managed - 在测试中共享托管资源(zio 测试)
我正在绑定HttpRoute
并测试它。这发生在ZManaged
上下文中。
然而,我每次测试都需要use
它,这是非常低效的资源。
ZManaged
有没有办法在上下文中运行许多标记测试?
scala - 什么是 ZIO 错误通道以及如何了解其中的内容?
ZIO
( https://zio.dev/ ) 是一个 scala 框架,其核心是ZIO[R, E, A]
数据结构,其站点为三个参数提供以下信息:
齐奥
数据类型具有
ZIO[R, E, A]
三个类型参数:
R
- 环境类型。效果需要 type 的环境R
。如果此类型参数为Any
,则表示效果没有要求,因为您可以使用任何值(例如,单位值()
)运行效果。E
- 故障类型。效果可能会因 type 的值而失败E
。一些应用程序将使用Throwable
. 如果此类型参数为Nothing
,则表示效果不会失败,因为没有 Nothing 类型的值。A
- 成功类型。效果可能会以 type 的值成功A
。如果此类型参数为Unit
,则表示效果不会产生有用的信息,如果是Nothing
,则表示效果将永远运行(或直到失败)。
很容易得到什么A
是:它是函数在名义情况下返回的值,即我们编写函数的原因。
R
是一种依赖注入 - 一个有趣的话题,但我们可以忽略它,始终ZIO
将其设置为Any
(实际上IO[E, A] = ZIO[Any, E, A]
在 lib 中有一个别名)。
因此,它仍然E
是用于错误的类型(著名的错误通道)。我大概明白这IO[E, A]
是一种Either[E, A]
,但处理效果(这很棒)。
我的问题是:为什么我应该在我的应用程序中到处使用错误通道,我如何决定错误通道中应该包含什么?
scala - 构建一个 ZIO 和 http4s 应用程序,与 sbt 一起工作,在 Bazel 中失败:缺少一个隐式
我正在尝试构建一个集成 ZIO 和 http4s 的服务。
起点是这个例子(它使用 zio 1.0.1、http4s 0.21.3、scala 2.12.11)
我能够使用 构建下面的代码而没有任何问题sbt
,但是在尝试使用 Bazel 构建时遇到了麻烦:
Sbt 很高兴,但是当我用 Bazel 构建它时:
关于 bazel 设置:我使用rules_scala
from Higherkindness的BUILD
文件如下:
当涉及到隐式时,我并不太了解,我想知道“魔法酱”的哪一部分缺少让这个在 Bazel 中工作。到目前为止,我有两个假设:
- 我错过了一个我需要在某处明确指定的依赖项,当使用 sbt 构建时它在类路径上,而在 Bazel 中丢失
- 整个事情取决于宏,我知道这在我的设置中可能有问题
因此,我有一个基本问题:任何人都可以对正在发生的魔法有所启发,让编译器compile
在上面的示例代码中找到正确的隐式传递给?
scala - 在 ZIO 中设置默认执行上下文
我正在尝试在 ZIO 中使用 TrampolineExecutionContext 来测试同一线程上的后台流订阅(这样我就可以按照我期望的顺序运行效果)。
在这种情况下,我得到了我所期望的:
《在流元素中》、《深入理解》
如果我删除on(trampolineExecutionContext)
,我将仅因为我没有加入光纤(创建同步点)而获得“内部理解”。
如何为整个测试将默认上下文设置为 trampolineExecutionContext 而无需在每次调用或重要调用中都重复它?
scala - 使用 ZIO 测试套件集成测试 HTTP 服务器
我试图找出为支持两个端点的 Http4s 应用程序编写集成测试的习惯用法。我通过在新光纤上分叉它来启动Main
应用程序类,然后在发布. 然后我将其转换为 a并通过具有多个s的整体传递它。ZManaged
ZManaged
ZLayer
provideCustomLayerShared()
suite
testM
- 我在正确的轨道上吗?
- 它的行为不像我预期的那样:
- 尽管以上述方式管理的 httpserver 已提供给包含两个测试的套件,但它在第一次测试后被释放,因此第二次测试失败
- 测试套件永远不会完成,只是在执行两个测试后挂起
为下面的代码半生不熟的性质道歉。
测试的输出是第二个测试失败,而第一个测试成功。我进行了足够多的调试,发现 HTTPServer 在第二次测试之前已经关闭。
并且无论我是否在 sbt testOnly 上运行 Intellij 的测试,测试过程都会在这一切之后一直挂起,我必须手动终止它。
scala - 如何作为任务的结果返回空向量?
我创建了一个简单的项目,其中一种方法是(它是ZIO
Task
type Task[+A] = ZIO[Any, Throwable, A]
):
在某些情况下,我想返回一个空向量。我试着这样做:
或者
但它总是返回None
而不是空向量(空列表)。我应该如何重构此代码以仅返回一个空结果(内部没有数据的向量),没有异常或无?