问题标签 [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 回答
588 浏览

scala - Scala,ZIO - 如何测试效果是否返回成功?

我有一个简单的测试代码来检查模拟服务:

service回报Task[Done]。_ 它工作正常,但我也想检查它是否unsafeRun返回succeed。我试着这样做:

或者:

但它不起作用。有什么方法可以检查效果结果是否成功?

0 投票
2 回答
123 浏览

scala - 如何用 ZIO 解释最终的无标签 DSL?

我有一个最终的无标签 DSL 来构建简单的数学表达式:

我想实现一个 ZIO 解释器。根据module-pattern 指南,可能的实现如下所示:

使用此实现构建表达式时,必须provideLayer像这样重复调用:

这看起来更像是一种反模式。解释 DSL 的最惯用或最 ZIO 的方式是什么?

0 投票
1 回答
187 浏览

scala - ZIO 监视文件系统事件

帮助我如何在 ZIO 上组织目录扫描。这是我的版本,但它不会跟踪所有文件创建事件(错过一些事件)。

感谢您的意见。

0 投票
1 回答
328 浏览

scala - ZIO 1.0.3 改变了环境的工作方式,现在 http4s Blaze 将无法运行

我第一次使用 ZIO,我从https://github.com/guizmaii/scala-tapir-http4s-zio/blob/master/src/main/scala/example/HttpApp.scala的样板存根开始使用 ZIO 版本 1.0.0-RC17 来设置和运行 http4s Blaze 服务器,包括 Tapir。效果很好,但后来我尝试更新到版本 1.0.3,以便我使用最新版本,但该版本与此存根中的代码不兼容。具体来说:

这是定义服务器的代码(一些不相关的路由线从原始中删除):

这是 run() 方法的主体。运行此代码不会导致应用程序以代码 0 退出,因为 Blaze 服务器按预期阻止终止。问题是这个片段:

由于引入了 Has[A],这在 1.0.3 中不起作用。编译器现在抱怨你不能从最终类 Has 继承,所以你不能调用新的时钟。

我试图通过替换它来解决这个问题

并用 ExitCode 对象替换退出代码整数,这使得代码编译,但在此之后 Blaze 服务器似乎没有初始化或阻止应用程序的终止。它刚刚以退出代码 0 结束。

显然这里缺少一些东西,而且我还没有看到任何关于从旧环境系统转移到基于 Has[A] 的新系统的信息。如何修复此样板文件以便 Blaze 服务器再次运行?

0 投票
1 回答
357 浏览

scala - Scala,ZIO - 每次重试后记录一些东西

我有一个简单的代码retry在发布消息失败时执行:

但我不确定它是否会在每个retry. 如果发布失败,我想在每次重试后记录“发布事件失败”。此外,我不确定retryfold我的意思是)之后的代码是否在每个retry周期后执行。

这是正确的方法还是我应该使用其他方法来达到我的需要?

0 投票
3 回答
115 浏览

zio - 如何为理解片段运行一个简单的 ZIO

在 getstarted zio doc 页面中有这个简单的例子,但我无法运行它,有什么简单的代码可以使这个片段工作(有问题并能够在控制台中回答)?

0 投票
1 回答
284 浏览

scala - 与泛型一起使用的 ZIO Mock 方法

我正在尝试模拟具有通用方法的服务,但我无法弄清楚如何在模拟中定义效果。通用效果甚至可以工作吗?有什么解决方法吗?

服务:

模拟:

PS:我也尝试过,@mockable[AService.Service]但我收到:“宏扩展期间的异常:需要标识符但 $XMLSTART$< 找到”

谢谢

0 投票
1 回答
285 浏览

scala - Http4s解码器如何自定义无效字段的错误消息

我有以下代码:

我的堆栈是 http4s + zio。

我为这个案例类添加了自定义解码器,其中有一行:

发布无效的 json 和无效的电子邮件返回给我:

HTTP/1.1 422 无法处理的实体内容类型:文本/纯文本;charset=UTF-8 日期:2021 年 1 月 19 日星期二 16:46:27 GMT 内容长度:29

请求正文无效。

响应代码:422(无法处理的实体);时间:681ms;内容长度:29字节

我想定制。在 http4s 代码中,我看到 InvalidMessageBodyFailure。但我在文档中找不到如何自定义此响应的任何信息。

有人可能已经试过了吗?

谢谢

编辑:

示例用户创建请求:

json请求:

这可以使用这样的代码来实现:

但我想知道它是否可以通过一些已经完成但没有记录的http4s核心功能来简化:)

0 投票
1 回答
338 浏览

scala - 如何组合两个具有 zio 效果和不同类型环境的 Http4s 路由

我有两条Http4s路线:

哪里RTask只是Task/RIO一个自定义环境:

可以通过导入“zio-cats-interop”库并做常规来完成具有相同类型参数的两条路由的组合routes1<+>routes1,但是由于类型参数HttpRoutes是不变的,我不能对不同的类型做同样的事情:

有什么解决办法吗?

0 投票
1 回答
43 浏览

scala - zio sqs 消息属性

我,我有消费方法,如:

我向队列发送消息:

aws sqs 发送消息 --endpoint-url "https://sqs.eu-west-2.amazonaws.com/666" --queue-url "https://sqs.eu-west-2.amazonaws.com /666/queue-name" --message-body '{ "event_type": "create", "user_id": "666" }' --message-attributes "AWSTraceHeader={StringValue=TestTenant,DataType=String}"

和 message.attributes 给了我一张空地图..我做错了什么?谢谢!