问题标签 [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 - 类型 A 的输出值作为结果
我在 IDEA(scala 研讨会)中有下一个代码,
你能帮我请求输出结果吗(预期6)
我有输出
scala - 为什么不在主线程上执行分叉子任务?
我是zio的新手,所以我可能会错过一些东西。
zio 依赖:
编译组:'dev.zio',名称:'zio_2.12',版本:'1.0.0-RC16'
我有一个简单的示例:
如果我运行示例 A,那么所有效果都将在主线程上执行,这是预期的。
如果我运行示例 B,那么我希望效果 A 和 B 将在单独的线程(光纤)上执行,并且效果 C - 在主线程上。结果我得到所有效果都是在单独的线程(纤维)上执行的。
这是正确的行为吗?是否可以返回主线程?
scala - ZIO Schedule 简单示例
我想玩 ZIO 计划和重试,但找不到完成的示例。这段代码怎么样(IDEA 中的研讨会):
我期望一些以 1 秒为间隔的迭代输出。并有输出:
scala - ZIO Fiber orElse 生成异常消息
我想在 ZIO Fibers 上使用组合器 orElse。来自文档:
如果第一根光纤成功,则组合光纤将成功并获得结果;否则,组合的纤程将以第二个纤程的退出值完成(无论成功还是失败)。
我在控制台中使用 sbt 运行它。并输出:
我看到秒 Fiber 的结果,结果是 [2] 但是为什么它会输出这些不必要的异常/警告消息?
scala - ZIO,入门,纯功能下载器
我有一个简单的程序,它或多或少是一个下载器。它收集一个或多个可配置资源(通过自定义协议),将它们聚合并写入到位。
这个程序看起来很简单,但代码仍然很复杂,并且混合了功能代码和过程代码(来自我的 Java 背景)。我想简化它并转向一个功能齐全的。我正在阅读有关ZIO的信息,整个画面开始在我脑海中形成。
但是,在阅读了入门和概述之后,我仍然有一些问题。
主要流程可能如下:
我猜想包含静态值的配置,但也有一个 http 客户端将被放入 ZIO
Environment
。下载器可能是未来构建的效果,并且可能使用 ZIO
bracket
来关闭连接。我想我可以用fold
. 但我不知道如何创建和执行许多下载器。
已编辑 a)既然Future
是纯音符,我如何建模一个异步运行的效果(我打算使用 Play Standalone WS Client)?
编辑 b)我应该为每个目标创建一个下载器,请求将分配给他们。但是我应该如何在我的代码中实现它?我应该创建一个ZIO[Configuration, Throwable, List[Downloader]]
,然后,然后通过执行所有这些collectAllPar
吗?我不知道如何在磁盘上写入聚合。
我想用这个项目在内部推广 ZIO。所以我想使用最好的选择和最干净的方法。有人可以给我一些关于如何实现这些效果和构建我的代码的提示吗? 编辑:我应该在 ZIO 组件上构建我的系统还是构建一组功能并将它们包装到 ZIO 效果中?
非常感谢
scala - ZIO:如何为永远运行的进程加入 Fibers
我有以下 ZIO 程序,其中包含两个永远运行的进程:
上面的代码有效,但我想知道这是否是一种好习惯。
有2个问题:
可以吗,在主程序上运行2.进程。还是应该也是Fiber?
我
/li>join
最终是否必须使用 Fibers,即使它们永远运行并因此永远无法到达join
?
scala - ZIO,从效果提供环境
从ZIO开始,我试图将现有应用程序转换为纯功能应用程序。此应用程序依赖于 Http 和 Frp 客户端。它们都是从配置文件和可选的命令行参数配置的。
当前流程解析参数,然后读取配置文件并合并两者。结果Configuration
被传递给一些需要 Http 和 Ftp 客户端的组件。
现在,如果我想将其转换为 ZIO,我可以天真地创建这样的流程:
不幸的是,我无法提供,configs
因为它是由 for 理解本身产生的。
我的问题是:我们如何提供一种效果作为环境的结果?
scala - ZIO,执行后释放资源
我正在使用ZIO并构建了一个通过 HTTP 获取内容的简单应用程序:
它完成了这项工作,但客户端由Play StandaloneWsClient支持,我想关闭它并按照文档中的描述终止参与者系统:https ://github.com/playframework/play-ws#scala-1
所以我创建了一个终结器方法,但似乎没有效果:
如何指示 ZIO 调用终结器方法来释放我的资源?
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 会话需要一点时间来关闭它可以理解全局并行执行。但实际上它是迭代的顺序和内部的并行。
谢谢。
scala - 如何在 ZIO 中实现不使用潜在大量堆空间的循环
我知道 ZIO 维护自己的堆栈,即zio.internal.FiberContext#stack
保护递归函数,例如
从堆栈溢出。但是,它们仍然会占用 ZIO 解释器堆栈中的空间,这可能会导致OutOfMemoryError
非常深的递归。你将如何getNameFromUser
从上面重写函数,即使askForName
效果返回空字符串很长一段时间也不会破坏堆?