gpt4 book ai didi

scala - play2 进行枚举以将一个 Promise 转换为另一个 Promise

转载 作者:行者123 更新时间:2023-12-04 18:21:02 26 4
gpt4 key购买 nike

我正在尝试掌握在 Play 2 中使用 Iteratees 流式传输 cometd 结果的方法。我已经掌握了从回调创建枚举器和从 map 创建枚举器的句柄。
我的问题是 Enumeratee.map,它接受一个接受纯输入并返回纯输出的函数(例如 doc 中的字符串到 Int 的转换)。我想做的是接受一个纯粹的输入并返回一个结果的 promise 。
毕竟,枚举器向枚举器提供 promise ,枚举器将一个枚举器转换为另一个枚举器,因此应该有一种方法可以使枚举器映射到 promise 。

现在,让我举一个例子来说明这一点。假设我有一个 http 请求,其中包含要在我的数据库中查询的 ID 列表。假设这些 id 表示数据库表中的行,请求对这些行执行一组(长)计算,然后返回一组表示计算的 json 对象。
由于我有很长的事情要做,所以一次流式传输一个 ID 会很酷,所以我希望有一个枚举管道:

  • 查询数据库中的一行(返回该行的 promise )
  • 对行进行长时间计算(获取一行并返回计算的 promise )
  • 将长计算转换为 JSON
  • &> 将这传给 Play 2
  • 提供的 Comet 枚举对象

    1 有点简单,我可以构造一个带有 fromCallback 的枚举器,它将返回查询结果的 promise 。
    3 也有点简单,因为它是一个简单的 Enumeratee.map

    但是我无法理解如何实现步骤 2 的枚举对象的 applyOn。我可以理解,我已经构建了一个新的迭代对象,它从“内部”迭代对象获得 promise ,flatMap 长计算并返回新的 promise 。我不明白如何在给出奇怪的 applyOn 签名的情况下做到这一点: def applyOn[A](it: Iteratee[To, A]): Iteratee[From, Iteratee[To, A]]
    有人可以帮我吗?

    谢谢

    最佳答案

    主 Enumeratee.mapM[E] 上有一个方法,它采用 f: E => Promise[NE] 并返回 Enumeratee[E, NE]

    https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/libs/iteratee/Enumeratee.scala#L150

    关于scala - play2 进行枚举以将一个 Promise 转换为另一个 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10688581/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com