问题标签 [cats-effect]
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 - 如何遍历 List[IO] 执行一切并收集所有错误?
例如,我有一个带有一些错误的 IO 列表。
如果我使用遍历
它只打印 1,2,我可以得到一个错误“错误 3”我想打印所有数字
并获取所有错误的列表
我怎样才能做到这一点?
scala - 什么时候需要有超过 1 个 Blocker 实例?
在Blocker的文档中有以下段落:
不应隐式传递此类的实例,因为它们保持状态,并且在某些情况下,您的应用程序可能需要不同的 Blocker 实例。
为什么在某些情况下我需要一个以上的线程池(因此需要超过 1 个 Blocker)来进行阻塞操作?
scala - 将 fs2 流输出拆分为两个文件
我刚刚开始使用 fs2 流进行冒险。我想要实现的是读取一个文件(一个大文件,这就是我使用 fs2 的原因),对其进行转换并将结果写入两个不同的文件(基于一些谓词)。一些代码(来自https://github.com/typelevel/fs2),带有我的评论:
最有效的方法是什么?显而易见的解决方案是让两个流具有不同的过滤器,但效率低下(将有两次通过)。
scala - 如何将 http4s 服务器定义为 ZIO ZLayer,以便在主中注入和获取?
帮助我使用 ZLayers 定义一个 http4s。我正在学习,我很困惑。我想将 http 服务器作为一个组件。但我不知道如何组合 ZManageds 和 ZLayers 以便编译。
创建一个需要Runtime[ZEnv]
? ZEnv
或者创建一个需要 a 的层并为其生成运行时是否更有意义。
我不知道如何ZManaged[..., ..., Server]
从Layer
这里主要访问。我不完全理解这些access
方法。
也在底部,但重要性较低
PR 中的相同内容,请随时发表评论 https://github.com/kovacshuni/itsaren/pull/1
scala - 提高涉及文件转换的 fs2 流的性能
我有这样的东西(这是https://github.com/typelevel/fs2的一个例子,我的补充,我用评论标记):
如果fahrenheit.txt
与例如一样大。300mb 原始代码的执行需要几分钟。看来我的代码并没有更快。我怎样才能提高它的性能?运行时有大量未使用的CPU电源,磁盘是SSD,所以我不知道为什么它这么慢。我不确定我balance
是否正确使用。
scala - 对猫效应 Async.memoize 感到困惑
我对猫的影响还很陌生,但我想我已经掌握了它。但是我遇到了一种情况,我想记住 IO 的结果,但它并没有达到我的预期。
我要记忆的函数转换String => String,但是转换需要网络调用,所以实现为函数String => IO[String]。在非 IO 世界中,我只是保存调用的结果,但定义函数实际上无法访问它,因为它直到稍后才会执行。如果我保存构造的 IO[String],它实际上不会有帮助,因为该 IO 会在每次使用时重复网络调用。因此,我尝试使用 Async.memoize,它具有以下文档:
懒惰地记住 f。每次绑定返回的 F[F[A]] 时,效果 f 最多执行一次(内部 F[A] 第一次绑定时)。
我对 memoize 的期望是一个对给定输入只执行一次的函数,并且返回的 IO 的内容只被评估一次;换句话说,我希望生成的 IO 表现得好像它是 IO.pure(result),除了第一次。但这似乎不是正在发生的事情。相反,我发现虽然被调用的函数本身只执行一次,但每次仍会评估 IO 的内容——就像我试图天真地保存和重用 IO 时会发生的那样。
我构建了一个示例来说明问题:
这个程序的输出是:
虽然 plus1 函数本身只执行一次(打印了一个“foo”),但 IO 中包含的输出“bar”被打印了两次,而我希望它也只打印一次。(我还尝试在将 Async.memoize 返回的 IO 存储到地图之前将其展平,但这并没有多大作用)。
scala - 如何异步中断 fs2 流?
我正在尝试使用 SignalRef 中断 fs2 流。我使用以下内容设置并运行流。流应该在包含时运行,并在包含switch
时false
中断switch
true
然后我尝试用
但是,流仍在继续。在标准输出中我看到
所以显然它没有开始切换到 true 吗?
scala - 猫效应 IO monad 是如何真正起作用的?
我是函数式编程和 Scala 的新手,我正在查看 Cats Effect 框架并试图了解 IO monad 的作用。到目前为止,我所理解的是,在 IO 块中编写代码只是对需要完成的操作的描述,并且在您使用unsafe
提供的方法显式运行之前什么都不会发生,并且也是一种制作参考执行副作用的代码的方法实际上不运行它是透明的。
我尝试执行下面的代码片段只是为了理解它的含义:
输出是:
我不明白为什么赋值state = newState
不运行,但增量和赋值表达式out += 1
运行。我是否遗漏了一些关于这应该如何工作的明显内容?我真的可以使用一些帮助。我知道我可以使用这些unsafe
方法来运行它。
scala - Big Query Job 状态在查询完成之前完成
我有一个使用 BigQuery 创建 tsv 表的 scala 应用程序。当用户尝试访问数据时,如果查询作业完成,我想返回它,否则告诉他们它仍在运行。
我的查询作业创建如下所示:
获取数据的方法如下所示:
我在计算结束时使用 Cats Effect IO 进行评估的地方。我的问题是getQueryResults
作业上的方法会停止,直到查询完成。我试图通过检查 BQ Job: 上的另一种方法来防止这种情况发生isDone
。出于某种原因,在我的测试中,isDone
在查询完成之前返回 true。我在检查 BigQuery 控制台时看到了这一点。这会导致用户的请求始终停止,直到查询完成,而不是按预期返回消息。
如何在查询仍在运行时完成作业?我错过了工作和查询之间的一些区别吗?或者还有什么我错过的?感谢您提出的任何建议。
scala - 尝试模拟cats.effect.IO时出现Mockito错误
我试图cats.effect.IO
嘲笑
Sql
并且SqlConnection
是我公司的图书馆。
我有这个错误
问题是当我使用公司库的旧版本时,测试通过且没有错误。
在我公司库的旧版本和新版本上,两者都是相同的org.typelevel.cats-effect
版本。org.mockito.mockito-core