问题标签 [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 投票
2 回答
460 浏览

scala - 类型 A 的输出值作为结果

我在 IDEA(scala 研讨会)中有下一个代码,

你能帮我请求输出结果吗(预期6)

我有输出

0 投票
1 回答
140 浏览

scala - 为什么不在主线程上执行分叉子任务?

我是zio的新手,所以我可能会错过一些东西。

zio 依赖:

编译组:'dev.zio',名称:'zio_2.12',版本:'1.0.0-RC16'

我有一个简单的示例:

如果我运行示例 A,那么所有效果都将在主线程上执行,这是预期的。

如果我运行示例 B,那么我希望效果 A 和 B 将在单独的线程(光纤)上执行,并且效果 C - 在主线程上。结果我得到所有效果都是在单独的线程(纤维)上执行的。

这是正确的行为吗?是否可以返回主线程?

0 投票
1 回答
1256 浏览

scala - ZIO Schedule 简单示例

我想玩 ZIO 计划和重试,但找不到完成的示例。这段代码怎么样(IDEA 中的研讨会):

我期望一些以 1 秒为间隔的迭代输出。并有输出:

0 投票
2 回答
605 浏览

scala - ZIO Fiber orElse 生成异常消息

我想在 ZIO Fibers 上使用组合器 orElse。来自文档:

如果第一根光纤成功,则组合光纤将成功并获得结果;否则,组合的纤程将以第二个纤程的退出值完成(无论成功还是失败)。

我在控制台中使用 sbt 运行它。并输出:

我看到秒 Fiber 的结果,结果是 [2] 但是为什么它会输出这些不必要的异常/警告消息?

0 投票
1 回答
325 浏览

scala - ZIO,入门,纯功能下载器

我有一个简单的程序,它或多或少是一个下载器。它收集一个或多个可配置资源(通过自定义协议),将它们聚合并写入到位。

这个程序看起来很简单,但代码仍然很复杂,并且混合了功能代码和过程代码(来自我的 Java 背景)。我想简化它并转向一个功能齐全的。我正在阅读有关ZIO的信息,整个画面开始在我脑海中形成。

但是,在阅读了入门和概述之后,我仍然有一些问题。

主要流程可能如下:

  1. 我猜想包含静态值的配置,但也有一个 http 客户端将被放入 ZIO Environment

  2. 下载器可能是未来构建的效果,并且可能使用 ZIObracket来关闭连接。我想我可以用fold. 但我不知道如何创建和执行许多下载器。
    已编辑 a)既然Future是纯音符,我如何建模一个异步运行的效果(我打算使用 Play Standalone WS Client)?
    编辑 b)我应该为每个目标创建一个下载器,请求将分配给他们。但是我应该如何在我的代码中实现它?我应该创建一个ZIO[Configuration, Throwable, List[Downloader]],然后,然后通过执行所有这些collectAllPar吗?

  3. 我不知道如何在磁盘上写入聚合。

我想用这个项目在内部推广 ZIO。所以我想使用最好的选择和最干净的方法。有人可以给我一些关于如何实现这些效果和构建我的代码的提示吗? 编辑:我应该在 ZIO 组件上构建我的系统还是构建一组功能并将它们包装到 ZIO 效果中?

非常感谢

0 投票
2 回答
782 浏览

scala - ZIO:如何为永远运行的进程加入 Fibers

我有以下 ZIO 程序,其中包含两个永远运行的进程:

上面的代码有效,但我想知道这是否是一种好习惯。

有2个问题:

  1. 可以吗,在主程序上运行2.进程。还是应该也是Fiber

  2. join最终是否必须使用 Fibers,即使它们永远运行并因此永远无法到达join

    /li>
0 投票
1 回答
181 浏览

scala - ZIO,从效果提供环境

ZIO开始,我试图将现有应用程序转换为纯功能应用程序。此应用程序依赖于 Http 和 Frp 客户端。它们都是从配置文件和可选的命令行参数配置的。

当前流程解析参数,然后读取配置文件并合并两者。结果Configuration被传递给一些需要 Http 和 Ftp 客户端的组件。

现在,如果我想将其转换为 ZIO,我可以天真地创建这样的流程:

不幸的是,我无法提供,configs因为它是由 for 理解本身产生的。

我的问题是:我们如何提供一种效果作为环境的结果?

0 投票
0 回答
150 浏览

scala - ZIO,执行后释放资源

我正在使用ZIO并构建了一个通过 HTTP 获取内容的简单应用程序:

它完成了这项工作,但客户端由Play StandaloneWsClient支持,我想关闭它并按照文档中的描述终止参与者系统:https ://github.com/playframework/play-ws#scala-1

所以我创建了一个终结器方法,但似乎没有效果:

如何指示 ZIO 调用终结器方法来释放我的资源?

0 投票
1 回答
1128 浏览

scala - ZIO IO.collectAll 和 ZIO.collectAllPar 一起

我有一个下一个任务,有 N db 查询(例如 3 - Seq(10,20,30))和迭代计数 = 4。我想使用 ZIO 和下一个:顺序执行迭代和内部迭代并行评估效果。

简化的代码如下所示

此代码有效并返回 seqpar = List(Res(1,10), Res(1,20), Res(1,30), Res(2,10), Res(2,20), Res(2,30), Res(3,10), Res(3,20), Res(3,30))

但是每个效果(exec : Task[Res])都是并行执行的。

看起来 IO.collectAll 或 sqTestResults.flatten 在这里不合适。

在真正的代码中,在“这里我为这个执行者打开新的数据库会话”的地方。我打开到 Postgres 的新 jdbc 连接。当我运行此代码并从 pg_stat_activity 监视活动会话时,我看到该应用程序产生了很多会话,计数等于 4*3=12。

但我的期望是在单次迭代中看到大约 3 个会话,下一次会有更多新的 3 个会话和新的 3 个会话。

Adam Fraser 的解决方案按预期工作,但我为我简化了它。

和 3 次迭代的结果。

此迭代的每个第一个会话在上一次迭代的最后一个 endTs 之后开始。但是 postgres 会话需要一点时间来关闭它可以理解全局并行执行。但实际上它是迭代的顺序和内部的并行。

谢谢。

0 投票
2 回答
631 浏览

scala - 如何在 ZIO 中实现不使用潜在大量堆空间的循环

我知道 ZIO 维护自己的堆栈,即zio.internal.FiberContext#stack保护递归函数,例如

从堆栈溢出。但是,它们仍然会占用 ZIO 解释器堆栈中的空间,这可能会导致OutOfMemoryError非常深的递归。你将如何getNameFromUser从上面重写函数,即使askForName效果返回空字符串很长一段时间也不会破坏堆?