问题标签 [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.

0 投票
1 回答
554 浏览

scala - 播放框架 WebSocket 异步

我正在使用 Play Framework 控制器公开的 WebSocket 端点。然而,我的客户将发送一个大字节数组,我对如何在我的 Iteratee 中处理这个感到有点困惑。这是我所拥有的:

def myWSEndPoint(f: String => String) = WebSocket.async[Array[Byte]] { request =>

}

从上面的代码中可以看出,我一直坚持如何将字节数组作为一个请求处理并将响应作为字符串发送回?我的困惑在于 Iteratee.foreach 调用。这 foreach 是字节数组上的 foreach 还是我从客户端作为字节数组发送的请求的全部内容?令人困惑!

有什么建议么?

0 投票
1 回答
513 浏览

scala - 如何在 Play 2 中从 ReactiveMongo 返回 JSON 的枚举器

在我们的项目中,我们使用ReactiveMongowith Play 2.2.1

问题是,以 的形式Enumerator[A]返回的数据ReactiveMongo流实际上是一个值对象流,没有逗号分隔,也没有流的开始和结束注解,可以看作数组的开闭陈述。

JSON这给消费者带来了问题JS client,因为预期的格式是 [A1,A2, ...]

所以我们跳了起来,将我们的Enumeratee[A]to转换为Enumerator[String],并检查它是否是第一个元素:

这行得通,但感觉就像在发明轮子。

对于这个常见问题,是否有更好的解决方案?

0 投票
1 回答
527 浏览

scala - 在播放框架中关闭 Twitter 流连接

我在下面的代码示例中使用 Play 2.2 WS API 连接到 twitter 流 API。我一直在试图弄清楚如何在流建立后断开连接。有没有合适的方法来做到这一点而不是停止应用程序?任何帮助将不胜感激。

0 投票
1 回答
231 浏览

scala - 如何根据一个键组合两个枚举器(在 Dones 之间维护 Iteratee 状态)?

我正在尝试将两个 Play 框架枚举器组合在一起,但合并具有相同键值的值。在大多数情况下,它可以工作,除了用于保留以前没有匹配的值的 Map 每次找到匹配并返回 Done Iteratee 时都会丢失。

有没有办法在返回完成后为下一个步骤调用提供状态?

到目前为止,我发现的任何示例似乎都是围绕将连续值分组在一起然后传递整个分组,而没有将流中的一些任意值分组并且仅在分组后传递特定值。

理想情况下,一旦匹配成功,它将发送匹配的值。到目前为止,我所做的(几乎基于创建基于时间的分块 Enumeratee

这个的调用看起来像;

0 投票
1 回答
133 浏览

scala - 文件写入迭代器没有收到 WS.get 的 EOF

我创建了一个简单的迭代器来使用 WS 下载文件,如此链接中所述。

考虑以下代码段:

在 WS.get 之后调用 .map(_.run) 似乎在这里没有效果,因为 iteratee 似乎没有收到 Input.EOF。它使我无法关闭频道。这是我得到的输出:

我究竟做错了什么?

我正在使用 Play Framework 2.2.2。

提前致谢。

0 投票
1 回答
238 浏览

java - 如何根据合并规则将 2 个枚举器合并为一个

我们在 Playframework 上有一个小型 Scala 项目。我正在尝试做所有反应,并偶然发现了一个问题。

我有两个 Enumerator[A] 实例,代表按日期排序的数据库中的值。我需要将它们作为单个 Enumerator[A] 保持日期排序返回。我在 Enumerator[A] 中没有找到任何解决方案,所以我在单个集合中累积 A,然后对它们进行排序。

什么是应对这种情况的反应方式?

0 投票
1 回答
608 浏览

scala - 如何使用 play iteratees 创建无限枚举器

我希望能够创建一个可以无限重复一系列元素的枚举器,但我无法找到一种方法。当我创建一个递归枚举器时,当我尝试引用它时似乎溢出了堆栈。例如,为了创建一个重复 A、B、C、D、A、B、C、D、A、B、C、D、A 的枚举器...我希望使用类似的东西:

但是然后尝试以任何方式使用它,我得到堆栈溢出:

0 投票
1 回答
457 浏览

scala - 理解 Concurrent.unicast 的论点

我使用 Play Framework 2.2

为了实现 WebSocket 连接,我使用了Concurrent.unicast适合我需要的:

但是,源代码Concurrent.unicast显示了几个参数的需要:

我知道这onComplete是在 is 时执行IterateeDone。但是,回调和方法
之间有什么区别:onCompletemapIteratee

此外,源代码Enumerator#onDoneEnumerating中介绍了需要什么。 事实上,我遇到了一些 WebSocket 的实现,它处理:

我对onComplete,onDoneEnumerating和感到困惑Iteratee#map
有人可以解释这些差异吗?
尤其是,为什么Concurrent#broadcast不像现在那样提出onComplete论点unicast

很难找到一些关于Iteratee世界的好文档。

0 投票
1 回答
521 浏览

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(在本例中为响应提供输出的)。

我想出了两种方法,但它们对我来说似乎都不够好:

  • 用于在我的 BodyParserplay.api.libs.iteratee.Concurrent.boradcast中生成一个Channel和一个,并将每个收到的块推送到. 没有 s 所具有的属性- Enumerator 不会产生新值,直到应用它消耗旧值。如果我这样做,如果上传者的互联网连接比下载者更快,我就会“膨胀” ,占用越来越多的内存,而不是一次处理一个块。EnumeratorChannelChannelsEnumeratorIterateeChannel

  • 创建一个代理 akkaActor并将上传的文件逐块发送给它,仅在下载器使用完最后一个文件后才发送下一个文件。但是在这种情况下,每个块被发送到下载器的确认必须通过Actor代理,以便上传Iteratee器将另一个块发送到代理。这对我来说似乎是不必要的开销。

我想我的问题是双重的:

  1. 有没有一种简单的方法来构造一个“转发”Enumerator来生成一个接收到的值Iteratee
  2. 在我的用例中,使用 Play 和 Scala 的异步工具包实现我想到的场景的正确方法是什么?
0 投票
1 回答
53 浏览

scala - 创建一个简单的 Iteratee 会产生类型错误?

我正在尝试基于在 REPL 上使用 Play2 创建一个简单的 Iteratee 。但我得到一个missing parameters错误。但是,如果我为其提供类型参数ele就可以了。有人可以解释一下吗?