问题标签 [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.

0 投票
1 回答
242 浏览

scala - 使用 ZIO Actors 创建两个执行基本乒乓通信的 Actor

我是演员的新手,并尝试使用类型层次结构和有状态实例来执行简单的乒乓球示例。我完全按照 zio 演员 [微型网站][1] 对程序代码进行了一些更新。我在./src/main/resources/application.conf的配置文件 如下所示:

MyApp.scala

我不确定我是否正确更新了代码,这是我运行代码时得到的

任何帮助![1]:https ://zio.github.io/zio-actors/docs/usecases/usecases_pingpong

0 投票
1 回答
220 浏览

scala - ZStream 忽略并行操作,而是按顺序执行

以下代码应该putStrLn并行执行效果,因为mapMPar

但实际上无论如何它总是foo先处理。bar我错过了什么还是一个错误?

0 投票
0 回答
180 浏览

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 等等。

如果我在这里明显遗漏了什么,请告诉我:-)

0 投票
1 回答
231 浏览

scala - throttleShape 的参数是什么意思?

zio-streams 提供了throttleShape哪些

我正在努力理解这些参数unit是如何被使用的duration burstcostFun从我对令牌桶的阅读中

表示处理一个元素需要一个令牌(costFun = _ => 1),并且unit = 1一秒( )后补充一个令牌( duration = 1.second)。然而,我对各种值的实验似乎并没有导致任何节流,除了

这使它挂起。例如,如何解释以下使用无限持续时间的片段(来自 PR)中的节流

具体来说,假设我想每分钟最多处理 100 个元素,那么应该如何throttleShape指定呢?

0 投票
0 回答
105 浏览

managed - 在测试中共享托管资源(zio 测试)

我正在绑定HttpRoute并测试它。这发生在ZManaged上下文中。

然而,我每次测试都需要use它,这是非常低效的资源。

ZManaged有没有办法在上下文中运行许多标记测试?

0 投票
1 回答
640 浏览

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],但处理效果(这很棒)。

我的问题是:为什么我应该在我的应用程序中到处使用错误通道,我如何决定错误通道中应该包含什么?

0 投票
1 回答
296 浏览

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_scalafrom HigherkindnessBUILD文件如下:

当涉及到隐式时,我并不太了解,我想知道“魔法酱”的哪一部分缺少让这个在 Bazel 中工作。到目前为止,我有两个假设:

  • 我错过了一个我需要在某处明确指定的依赖项,当使用 sbt 构建时它在类路径上,而在 Bazel 中丢失
  • 整个事情取决于宏,我知道这在我的设置中可能有问题

因此,我有一个基本问题:任何人都可以对正在发生的魔法有所启发,让编译器compile在上面的示例代码中找到正确的隐式传递给?

0 投票
1 回答
490 浏览

scala - 在 ZIO 中设置默认执行上下文

我正在尝试在 ZIO 中使用 TrampolineExecutionContext 来测试同一线程上的后台流订阅(这样我就可以按照我期望的顺序运行效果)。

在这种情况下,我得到了我所期望的:

《在流元素中》、《深入理解》

如果我删除on(trampolineExecutionContext),我将仅因为我没有加入光纤(创建同步点)而获得“内部理解”。

如何为整个测试将默认上下文设置为 trampolineExecutionContext 而无需在每次调用或重要调用中都重复它?

0 投票
2 回答
613 浏览

scala - 使用 ZIO 测试套件集成测试 HTTP 服务器

我试图找出为支持两个端点的 Http4s 应用程序编写集成测试的习惯用法。我通过在新光纤上分叉它来启动Main应用程序类,然后在发布. 然后我将其转换为 a并通过具有多个s的整体传递它。ZManagedZManagedZLayerprovideCustomLayerShared()suitetestM

  1. 我在正确的轨道上吗?
  2. 它的行为不像我预期的那样:
  • 尽管以上述方式管理的 httpserver 已提供给包含两个测试的套件,但它在第一次测试后被释放,因此第二次测试失败
  • 测试套件永远不会完成,只是在执行两个测试后挂起

为下面的代码半生不熟的性质道歉。

测试的输出是第二个测试失败,而第一个测试成功。我进行了足够多的调试,发现 HTTPServer 在第二次测试之前已经关闭。

并且无论我是否在 sbt testOnly 上运行 Intellij 的测试,测试过程都会在这一切之后一直挂起,我必须手动终止它。

0 投票
1 回答
114 浏览

scala - 如何作为任务的结果返回空向量?

我创建了一个简单的项目,其中一种方法是(它是ZIOTask

type Task[+A] = ZIO[Any, Throwable, A]):

在某些情况下,我想返回一个空向量。我试着这样做:

或者

但它总是返回None而不是空向量(空列表)。我应该如何重构此代码以仅返回一个空结果(内部没有数据的向量),没有异常或无?