如何使用源队列并将其返回给调用者而不具体化它?

2024-01-26

我正在尝试使用新的 Akka 流,想知道如何使用源队列并将其返回给调用者,而不在我的代码中实现它?

想象一下,我们有一个库可以进行多次异步调用并通过以下方式返回结果Source。函数看起来像这样

def findArticlesByTitle(text: String): Source[String, SourceQueue[String]] = {

  val source = Source.queue[String](100, backpressure)

  source.mapMaterializedValue { case queue =>

    val url = s"http://.....&term=$text"
    httpclient.get(url).map(httpResponseToSprayJson[SearchResponse]).map { v =>
      v.idlist.foreach { id =>
        queue.offer(id)
      }

      queue.complete()
    }
  }

  source
}

调用者可能会这样使用它

// There is implicit ActorMaterializer somewhere
val stream = plugin.findArticlesByTitle(title)
val results = stream.runFold(List[String]())((result, article) => article :: result)

当我在里面运行这段代码时mapMaterializedValue永远不会被执行。

我不明白为什么我无权访问实例SourceQueue是否应该由调用者决定如何实现源。

我应该如何实施这个?


在您的代码示例中,您返回源而不是返回值source.mapMaterializedValue(方法调用不会改变 Source 对象)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用源队列并将其返回给调用者而不具体化它? 的相关文章

随机推荐

  • 将数组插入 mysql 数据库列

    我正在尝试将表单中的多选下拉列表中的值插入到 mysql 数据库列中 例如 下拉列表将选择一个或多个选项 然后在发布表单时将数据插入到 mysql 数据库中的一列中 我陷入了如何插入数据的困境 如果你想插入单行 那么你可以使用 implod
  • 如何获取使用 ChromeDriver 在 Azure 云服务中工作的 C# azure 服务

    我编写了一个使用 Selenium WebDriver ChromeDriver 的 C Azure 云服务 但当我将其部署到 Azure 时它不起作用 在本地运行良好 可能是因为我安装了 Chrome 我使用我的服务部署 chromedr
  • 如何添加自定义键盘

    我做了一个简单的应用程序 我的应用程序包含 10 个文本字段 我需要的是我需要隐藏默认键盘我放置手动键像这样 http b imagehost org download 0994 keypad 我该如何完成这个按键作为我的应用程序的键盘 任
  • gdb:打印二维fortran数组[重复]

    这个问题在这里已经有答案了 使用 GDB 在 Fortran 代码中打印二维数组的值时遇到问题 gdb print var 1 2 no such vector element 经过广泛的搜索后 我发现了许多关于该问题的帖子 日期为 200
  • 我可以为我的函数和类使用 PHP 保留名称吗?

    我想创建一个名为 new 的函数和一个名为 case 的类 我可以用 PHP 做到这一点吗 No http www php net manual en reserved keywords php you http codepad org z
  • 共享两个组合框的数据源

    我的 GUI 中有多个组合框 它们都需要数据 这些数据会随机变化 因此需要一种快速方法来保持所有值同步 我遇到了 DefaultComboBoxModel 它实际上非常适合 唯一的问题是 我需要组合框彼此独立 这意味着 如果我在其中选择一个
  • 页面重新加载时 Angular 应用程序中的 Grunt URL 重写

    Grunt 文件中的 livereload 块如下所示 livereload options open true middleware function connect options middleware var optBase type
  • 默认参数和非默认参数的顺序

    在Python中 我知道默认参数出现在末尾 并且非默认参数不能跟在默认参数后面 没事儿 例如 gt gt gt def foo x 0 y return x y SyntaxError non default argument follow
  • ggplot - 多个图例排列

    我想在 ggplot 中排列具有多行和多列的多个图例 然而目前 从文档中我只能决定方向或操作 1 个图例内的行 列 我是否忽略了什么 感谢您提供解决方案的任何参考点 这是示例代码以及我所做的和预期的结果 data lt seq 1000 4
  • Minecraft 如何进行光照? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我唯一熟悉的模型是漫射照明 但这看起来比那要复杂得多 每个方块的亮度级别从 15 到 0 每个级别都比其上方的级别低 20 如果一个正
  • 如何将摘要输出转换为数据框?

    我总结了由 ID 组成的数据框 称为 DATA 的一列 以便获得给定列中每个 ID 的总数 我想将其转换为另一个数据框 称为 TOTALNUM 所以我有两列 第一列是 ID 本身 第二列是每个 ID 的总数 这可能吗 样本数据 ids lt
  • 在 iOS 上将立体声音频拆分为单声道流

    如果已回答此问题 我们深表歉意 我看到了很多问题 但没有好的答案 我正在尝试将立体声音乐从 iPod 库导出到两个单声道 caf 文件 我怎样才能在 iOS 上做到这一点 我目前正在使用 Objective C Thanks 更新 我已经成
  • 如何在 Flutter 中使屏幕可滚动?

    在我的 Flutter 项目中 在一页中我有一些行 包括垂直对齐的卡片 现在 我希望这个屏幕可以滚动 我尝试将该列替换为Listview但没有成功 我也尝试用它包裹它单子滚动视图但没有用 它显示如下图所示 这是代码 HomeFragment
  • 将 Moq 模拟对象传递给构造函数

    我已经使用 RhinoMocks 有一段时间了 但刚刚开始研究起订量 我有一个非常基本的问题 令我惊讶的是 这并没有立即可用 假设我有以下类定义 public class Foo private IBar bar public Foo IB
  • 如何在.NET 中从经过身份验证的 Twitter oauth_token 注册/登录解析用户?

    我用过OAuth1验证器 https github com xamarin Xamarin Auth blob master src Xamarin Auth OAuth1Authenticator cs L83类来自Xamarin Aut
  • 如何在身份服务器4中获取客户端的远程IP地址

    上下文变量 ResourceOwnerPasswordValidationContext 中是否有一个属性 可让我访问发送初始身份验证请求的客户端的 IP 地址 在该上下文中没有类似的信息可供您获取 你唯一的选择就是注射IHttpConte
  • 活动未发现异常?

    我正在得到一个ActivityNotFoundException在下面的代码中 主程序 java Intent intent new Intent intent setAction com test app TEST startActivi
  • 调试调试和发布版本之间差异的最佳实践和工具?

    我见过一些帖子讨论了调试和发布版本之间可能导致差异的原因 但我认为没有人从开发的角度解决了解决问题的最有效方法是什么 当发布版本中出现错误但调试版本中没有出现错误时 我做的第一件事是通过 valgrind 运行我的程序 希望得到更好的分析
  • 从 PHP 数组中删除 NULL、FALSE 和 ''(但不包括 0)

    我想删除NULL FALSE and 价值观 I used array filter但它删除了0的也 有什么功能可以实现我想要的功能吗 array NULL FALSE 0 1 gt array 0 1 array filter http
  • 如何使用源队列并将其返回给调用者而不具体化它?

    我正在尝试使用新的 Akka 流 想知道如何使用源队列并将其返回给调用者 而不在我的代码中实现它 想象一下 我们有一个库可以进行多次异步调用并通过以下方式返回结果Source 函数看起来像这样 def findArticlesByTitle