问题标签 [iterate]
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 - 播放框架 WebSocket 异步
我正在使用 Play Framework 控制器公开的 WebSocket 端点。然而,我的客户将发送一个大字节数组,我对如何在我的 Iteratee 中处理这个感到有点困惑。这是我所拥有的:
def myWSEndPoint(f: String => String) = WebSocket.async[Array[Byte]] { request =>
}
从上面的代码中可以看出,我一直坚持如何将字节数组作为一个请求处理并将响应作为字符串发送回?我的困惑在于 Iteratee.foreach 调用。这 foreach 是字节数组上的 foreach 还是我从客户端作为字节数组发送的请求的全部内容?令人困惑!
有什么建议么?
scala - 如何在 Play 2 中从 ReactiveMongo 返回 JSON 的枚举器
在我们的项目中,我们使用ReactiveMongo
with Play 2.2.1
。
问题是,以 的形式Enumerator[A]
返回的数据ReactiveMongo
流实际上是一个值对象流,没有逗号分隔,也没有流的开始和结束注解,可以看作数组的开闭陈述。
JSON
这给消费者带来了问题JS client
,因为预期的格式是
[A1,A2, ...]
所以我们跳了起来,将我们的Enumeratee[A]
to转换为Enumerator[String]
,并检查它是否是第一个元素:
这行得通,但感觉就像在发明轮子。
对于这个常见问题,是否有更好的解决方案?
scala - 在播放框架中关闭 Twitter 流连接
我在下面的代码示例中使用 Play 2.2 WS API 连接到 twitter 流 API。我一直在试图弄清楚如何在流建立后断开连接。有没有合适的方法来做到这一点而不是停止应用程序?任何帮助将不胜感激。
scala - 如何根据一个键组合两个枚举器(在 Dones 之间维护 Iteratee 状态)?
我正在尝试将两个 Play 框架枚举器组合在一起,但合并具有相同键值的值。在大多数情况下,它可以工作,除了用于保留以前没有匹配的值的 Map 每次找到匹配并返回 Done Iteratee 时都会丢失。
有没有办法在返回完成后为下一个步骤调用提供状态?
到目前为止,我发现的任何示例似乎都是围绕将连续值分组在一起然后传递整个分组,而没有将流中的一些任意值分组并且仅在分组后传递特定值。
理想情况下,一旦匹配成功,它将发送匹配的值。到目前为止,我所做的(几乎基于创建基于时间的分块 Enumeratee)
这个的调用看起来像;
scala - 文件写入迭代器没有收到 WS.get 的 EOF
我创建了一个简单的迭代器来使用 WS 下载文件,如此链接中所述。
考虑以下代码段:
在 WS.get 之后调用 .map(_.run) 似乎在这里没有效果,因为 iteratee 似乎没有收到 Input.EOF。它使我无法关闭频道。这是我得到的输出:
我究竟做错了什么?
我正在使用 Play Framework 2.2.2。
提前致谢。
java - 如何根据合并规则将 2 个枚举器合并为一个
我们在 Playframework 上有一个小型 Scala 项目。我正在尝试做所有反应,并偶然发现了一个问题。
我有两个 Enumerator[A] 实例,代表按日期排序的数据库中的值。我需要将它们作为单个 Enumerator[A] 保持日期排序返回。我在 Enumerator[A] 中没有找到任何解决方案,所以我在单个集合中累积 A,然后对它们进行排序。
什么是应对这种情况的反应方式?
scala - 如何使用 play iteratees 创建无限枚举器
我希望能够创建一个可以无限重复一系列元素的枚举器,但我无法找到一种方法。当我创建一个递归枚举器时,当我尝试引用它时似乎溢出了堆栈。例如,为了创建一个重复 A、B、C、D、A、B、C、D、A、B、C、D、A 的枚举器...我希望使用类似的东西:
但是然后尝试以任何方式使用它,我得到堆栈溢出:
scala - 理解 Concurrent.unicast 的论点
我使用 Play Framework 2.2
为了实现 WebSocket 连接,我使用了Concurrent.unicast
适合我需要的:
但是,源代码Concurrent.unicast
显示了几个参数的需要:
我知道这onComplete
是在 is 时执行Iteratee
的Done
。但是,回调和方法
之间有什么区别:onComplete
map
Iteratee
此外,源代码Enumerator#onDoneEnumerating
中介绍了需要什么。
事实上,我遇到了一些 WebSocket 的实现,它处理:
我对onComplete
,onDoneEnumerating
和感到困惑Iteratee#map
。
有人可以解释这些差异吗?
尤其是,为什么Concurrent#broadcast
不像现在那样提出onComplete
论点unicast
。
很难找到一些关于Iteratee
世界的好文档。
scala - 优雅的 Iteratee -> Play 中的枚举器“转发”
我想在 Play 中编写一个应用程序!framework 2.2.x 作为异步方法和play.api.libs.iterattee
包的练习。我想要做的是获取一个 POST 请求,其中包含一个大文件上传,并将其逐块发送,作为单独请求的下载。
“Play for Scala”一书和这个例子Iteratee
引导我接收请求中的文件,我可以在我在 custom 中定义的任何块中累积或迭代BodyParser
。在提供分块响应时,我需要为Enumerator
响应提供一个 - 就像Ok.chunked(enumerator)
Enumerator 提供新块时它将提供给客户端一样。
现在我想把它们放在一起,我似乎找不到一种优雅的反应方式来将新数据块从上传客户端异步传播到下载。似乎没有一种好方法可以将Iteratee
(在本例中BodyParser
)接收到的数据“转发”到新的Enumerator
(在本例中为响应提供输出的)。
我想出了两种方法,但它们对我来说似乎都不够好:
用于在我的 BodyParser
play.api.libs.iteratee.Concurrent.boradcast
中生成一个Channel
和一个,并将每个收到的块推送到. 没有 s 所具有的属性- Enumerator 不会产生新值,直到应用它消耗旧值。如果我这样做,如果上传者的互联网连接比下载者更快,我就会“膨胀” ,占用越来越多的内存,而不是一次处理一个块。Enumerator
Channel
Channels
Enumerator
Iteratee
Channel
创建一个代理 akka
Actor
并将上传的文件逐块发送给它,仅在下载器使用完最后一个文件后才发送下一个文件。但是在这种情况下,每个块被发送到下载器的确认必须通过Actor
代理,以便上传Iteratee
器将另一个块发送到代理。这对我来说似乎是不必要的开销。
我想我的问题是双重的:
- 有没有一种简单的方法来构造一个“转发”
Enumerator
来生成一个接收到的值Iteratee
? - 在我的用例中,使用 Play 和 Scala 的异步工具包实现我想到的场景的正确方法是什么?
scala - 创建一个简单的 Iteratee 会产生类型错误?
我正在尝试基于此在 REPL 上使用 Play2 创建一个简单的 Iteratee 。但我得到一个missing parameters
错误。但是,如果我为其提供类型参数ele
就可以了。有人可以解释一下吗?