问题标签 [highland.js]
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.
javascript - 如何通过高地从远程 JSON 数组创建对象流?
通过以下方式从 url 获取 JSON http://foo.bar/overview
:
在包含对象数组的 JSON 响应中产生:
我现在正在尝试设置一个包含数组每个对象的高地流。然而,我似乎只能从请求的整个响应中构建它,这似乎首先会适得其反。
我的第一个天真的解决方案是通过以下方式构建它:
四处挖掘我还意识到 highland 支持从请求对象本身设置流:
如何在不使用存储在内存中的整个响应的情况下即时从远程 JSON 创建一个对象数组流?
javascript - 如何使用双簧管迭代对象数组?
我有以下形式的 json 响应:
我使用 oboe.js 创建一个高地流:
我的问题是我不知道使用什么模式 node 以便它匹配该数组的每个元素。目前,我通过当前设置获得的项目是所有对象和属性:
如果响应将具有如下属性:
我本来可以用.overview.*
.
javascript - 如何解决流中的承诺?
我有一个高地流,其中每个元素都是获取请求的承诺:
所以当然当我跑步时:
我只看到:
然而,我想创建一个管道并处理承诺的实际结果。(我不想使用then
or await
)。我想通过流管道解决这些承诺。
我想应该有一种方法可以使高地流仅将已解决的承诺映射到新的流中,因此我希望能够将承诺流扁平化为它们的实际值流。
挖掘,我想要么flatMap
或flatten
应该做我正在寻找的东西,但我不知道如何继续,我所有的试验和错误都让我失望了。
我试过了:
如何解决流中的承诺?
javascript - Higland.js:将 toCallback 包装成 promise
我想写一些类似的东西:
但我看到一个错误:
如何正确绑定案例中的上下文
javascript - 如何将高地流转换为节点可读流?
我有一个高地流串流。我想通过外部库(在我的情况下为 Amazon S3)使用它,并且对于它的 SDK,我需要一个标准节点 Readable Stream。
有没有办法将高地流转换为开箱即用的 ReadStream ?还是我必须自己改造?
generics - 如何为 highlandjs 输入提示流?
我正在使用 typescript@2 和 highlandjs 库。高地的打字错过了这个mergeWithLimit(n)
功能。它:
采用 Stream 的 Stream 并将它们的值和错误合并到一个新的 Stream 中,限制可以在任何时间运行的未暂停流的数量。
现在,这个方法还没有为它的DefinitlyTyped类型进行类型提示。我试图添加它,但是interface Stream<R>
对于流的流只有一个并且没有。
然而,我将如何为流的流创建接口?我尝试定义一个接口:
但它没有编译:
如何mergeWithLimit
正确打字?
javascript - 如何使用 highland.js 分叉流?
我有一个sourceStream
由BaseData
对象组成的。
我想把这个流分成n
不同的流,然后BaseData
根据自己的喜好过滤和转换每个对象。
最后,我希望n
流只包含特定类型,并且分叉的流的长度可能会有所不同,因为将来可能会删除或添加数据。
我想我可以通过以下方式进行设置fork
:
我希望现在有两个流,并且foo
-stream 包含两个元素:
和bar
-stream 包含一个元素:
然而我得到了一个错误:
如何将一个流分成多个流?
我也尝试链接调用,但我只得到一个流的结果:
仅打印:
而不是预期的:
也可能是我误解的情况fork
。根据其文档条目:
Stream.fork() 分叉一个流,允许您添加具有共享背压的其他消费者。分叉给多个消费者的流只会以最慢的消费者可以处理它们的速度从其源中提取值。
注意:不要依赖分叉之间一致的执行顺序。此转换仅保证所有分叉将在处理第二个值 bar 之前处理一个值 foo。它不保证分叉处理 foo 的顺序。
提示:在分叉中修改流值时要小心(或使用这样做的库)。由于相同的值将传递给每个分叉,因此在一个分叉中所做的更改将在它之后执行的任何分叉中可见。再加上不一致的执行顺序,最终可能会出现细微的数据损坏错误。如果您需要修改任何值,则应制作副本并改为修改副本。
弃用警告:目前可以在消费流之后分叉(例如,通过转换)。这在下一个主要版本中将不再可能。如果您要分叉一个流,请始终在其上调用 fork。
因此,而不是“如何分叉流?” 我的实际问题可能是:如何将高原溪流即时复制到不同的溪流中?
node.js - nodejs:计算高地流的平均值
我刚刚开始使用 highland.js 和 node 中的流,我一直试图计算一些数字的最小/最大/平均值。这是我到目前为止所拥有的:
如果我这样做,比如说,toCallback
我console.log
得到的结果,
{min: 1, max: 3, count: 3, sum: 6}
但我对 count 和 sum 字段不感兴趣,我想要像{min: 1, max: 3, mean: 2}
.
但是,由于reduce的返回是一个对象,所以highland不能用它做任何事情——我只能消耗它,但我想在highland做平均。
我该如何从这里继续,或者我应该如何重构代码以获得平均值?
node.js - Highland.js 和缓冲区(或队列)
所以,我有一个代码来模拟这个问题:
产生这样的输出:
问题:我想要一个一定大小的缓冲区,我将在其中堆叠来自生产者的数据。因此,使用大小为 1 的缓冲区,输出应如下所示:
所以,如果“生产者”“忙”,我想缓冲生产者的价值。高地可以做这样的事情吗?
javascript - 为什么当一个流有错误时 flatMap 没有输出?
我尝试编写一个程序highland.js
来下载几个文件,解压缩并解析为对象,然后将对象流合并为一个流flatMap
并打印出来。
当所有 URL 都有效时,它工作正常。如果 URL 无效且没有下载文件,则 gunzip 报告错误。我怀疑发生错误时流会关闭。我希望flatMap
其他流会继续,但是该程序不会下载其他文件并且没有打印任何内容。
处理流中错误的正确方法是什么,以及如何flatMap
在一个流出现错误后不停止?
在命令式编程中,我可以添加调试日志来跟踪错误发生的位置。如何调试流式代码?
PS。toObjParser
是一个节点变换流。它采用 OSM XML 的可读流并输出与 Overpass OSM JSON 兼容的对象流。见https://www.npmjs.com/package/osm2obj
2017-12-19 更新:
我试着push
按照errors
@amsross 的建议打电话。为了验证是否push
真的有效,我推送了一个 XML 文档,并通过以下解析器对其进行了解析,我从输出中看到了它。但是,流仍然停止并且 url_3 没有下载。