问题标签 [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 - 高地消费和toArray方法一起
大家好,节日快乐!
我正在尝试使用高地的 csv 行流。为了进行一些特殊处理并避免将标头传递给流,我正在调用.consume()
,然后我希望将结果放在一个数组中。.toArray()
问题是从未调用过的回调。我只是对此感到好奇,因为我已经将解决方案更改为,.map().toArray()
但我仍然认为.consume()
这将是一个更优雅的解决方案。;) 这是从 csv 文件读取并处理行的代码:
非常感谢!
node.js - PapaParse 和高地
我必须在 NodeJS 中解析一个非常大的 CSV 文件并将其保存在一个数据库(异步操作)中,一次最多允许 500 个条目。由于内存限制,我必须流式传输 CSV 文件并希望使用 PapaParse 来解析 CSV 文件(因为这在我的情况下效果最好)。
由于 PapaParse 使用回调样式方法来解析 Node.js 流,我没有看到一个容易结合 highland(用于批处理和数据转换)和 PapaParse。因此,我尝试使用 ParseThrough 流向该流写入数据并读取该流以进行批处理:
显然,这不起作用,也没有真正做任何事情。是否有可能甚至更好的方法来解析非常大的 CSV 文件并将行保存在数据库中(最多 500 个批次)?
编辑:使用csv
包(https://www.npmjs.com/package/csv)可能会像这样(相同fast-csv
):
但不幸的是,这两个 NPM 包都不能在所有情况下正确解析 CSV 文件。
highland.js - 如何将 Highland 的 wrapCallback 与 n-arity 函数一起使用?
我想使用具有以下结构的方法(来自 jsonist):
jsonist.get(uri, options, callback)
uri
并且options
是必需的(传递某个标头的选项)
但是我不确定 Highland 的 wrapCallback 可以在这里处理这两个选项(减去回调)
const H = require('highland')
const req = H.wrapCallback(jsonist.get)
req(uri, options).apply(H.log)
这样记录的是流,而不是数据
有一个更好的方法吗?
node.js - 在检索文档时使用猫鼬处理背压
我正在使用高地来处理背压。我的代码是:
我希望获取一份文档,然后逐一处理地图的流。
我不确定这是否会处理背压,因为高地医生说:
请参阅高地文档中的背压部分。
某些流(例如基于事件的流)无法暂停。在这些情况下,数据会被缓冲,直到消费者准备好处理它。
如果这不能处理背压,请提出任何其他方式!
javascript - 从承诺创建高地流时如何处理承诺拒绝?
我通过打字稿在 node@8.11.1 上使用 highland@2.13.0。鉴于此代码片段:
它将返回我的预期输出:
然而,在我的代码库中,我有一些不返回null
值但会拒绝该承诺的承诺。但在这种情况下,高原崩溃:
会抛出:
我知道我可以将我的 Promise 拒绝转换为 null 值并将compact
它们作为一种解决方法,但我宁愿处理 Promise 拒绝本身。
我怎样才能只处理成功的承诺流而忽略使用高地的失败承诺流?我应该如何处理错误事件?
json - 在 Node.js 中将标头添加到 CSV 并返回具有匹配字符串的行
我正在尝试在匹配的字符串上返回一个行值。
我从没有标题详细信息的 csv 开始。将csv加载到内存后,我想我需要先添加标题,然后将数据转换为json,然后循环遍历数据以在数组中找到正确的对象。
我使用 highland 创建了一个读取流并输出到对象。但是,换行符\r
并\r\n
没有被解析出来并被注入到值字符串中。
这种方法似乎也没有解析整个文件,它输出 3 行。
最好将 CSV 构造为 JSON,然后使用该.filter()
方法匹配记录。
1000+行文件的实际输出
示例输入片段
注意:前几行仅包含“b”和“c”列。
javascript - 高地在完全消耗之前添加到流中?
是否有一种方法可以在高地流中添加一个完整描述我们需求的结束消息?
更少假设我们有以下情况:
然后使用这个流,我想计算每个正在处理的值并说
为 4 数组元素的数量。考虑到流中可能有数千个对象,我需要从流中消耗才能进行计数。
我不能说array.length,因为它是一个可能带有任何信息的源,并且该信息正在与流一起处理......我如何向流中添加带有所消费内容描述的消息结束?
typescript - 从高地流中的 aync 函数返回时如何处理元组?
我使用tsc@2.3.4
和highland@^2.13.0
。
我有一个异步函数,它返回一个类型为 的元组[string, string[]]
。
我过去曾与 highland 合作过,我知道我可以通过使用 Promise 创建一个新的 highland 流,并通过扁平化它来解决 Promise 来使用 Promise。
所以我所做的基本上是:创建承诺,并行化它们的消费,最后我想要一个[string, string[]]
via流flatten
。
然而,高地的实际行为与我的预期相矛盾。
这里我的 TypeScript 代码展示了我的期望:
我希望 shouldBeATuple 实际上是一个元组。然而,相反,我得到了所有元素的流,好像flatten
太平了。
我希望它在第一次迭代中:
在第二个:
然而我得到的是:
然后后面会跟着:“f”、“o”、“o”、“bar”、“b”、“a”、“r”。
所以我完全失去了元组,并得到一个包含所有元素的流的大“混乱”。
使用异步函数时如何获取元组流?
我发现当我不展平流时,我得到了我的结果,但打字稿会抛出一个错误:
node.js - 处理嵌套流
我正在尝试通过加入 2 个 csv 输入流来生成输出文件,对于 csv 1 中的每条记录,我想为 csv 2 中的每条记录生成一个输出。
我在浏览任何类似解决方案的堆栈溢出时遇到了高地,并遇到了:
我试图将其调整为我自己的问题,到目前为止有这个:
使用以下示例输入 csv1:
csv2:
我期望输出
但我只是得到:
我可以从调试语句中看到我退出 ROAD 一次然后它就停止了。
node.js - 在highlandjs中调用`group`后调用转换
目标是将流中的项目分组为多个组。分别对这些组运行转换,然后将所有组重新组合成一个流。
之后我可以使用的唯一调用group
似乎是each
并且不会将单个组传递给我的回调,它会传递整个分组对象的字典。调用map
不会将任何内容传递给我的回调。例子:
我怎样才能做到这一点?