我必须从输入文件中抽取行,转换它们并将它们放在输出文件中。
因为输入文件非常庞大,所以我要感谢HighlandJS。
转换步骤包括MySQL DB中的异步查询(通过node-mysql)和 我无法了解如何在流中管理异步查询。我的不同尝试给出了错误或什么都没有。
我的最后一次尝试是:
h(inputStream)
.split()
.through(JSONStream.parse())
.map(function (data) {
h.wrapCallback(pool.query(data, function (err, rows) {
return rows;
}));
})
.pipe(outputStream);
有关如何做到这一点的任何提示?
感谢。
答案 0 :(得分:1)
简短回答:您的map
转型必须返回一些内容。现在它什么也没有返回。
答案很长:
好的,我将略微简化你对这个答案的选择的逻辑。假设我们想要这个。
input -> map to rows -> output
问题是映射是异步的,因为你已经退出,map
函数必须返回一些东西。在这种情况下,您只需为输入中的每个元素返回一个流。所以它看起来像这样。
// input -> map to a stream of streams of rows -> output
h(input).map(h.wrapCallback(pool.query)).pipe(output);
最后一个问题实际上是获取行而不是流的流。您可以使用flatMap
转换执行此操作,该转换会将流媒体“展平”为“正常”流。
// input -> map to a stream of rows -> output
h(input).flatMap(h.wrapCallback(pool.query)).pipe(output);