Javascript 在高地流中执行节点mysql查询
我必须从输入文件中抽取行,转换它们并将它们放入输出文件中 因为输入文件很大,所以我使用HighlandJS流式传输它 转换步骤包括MySQL数据库中的异步查询(通过节点MySQL)和 我不知道如何在流中管理异步查询。我不同的尝试要么出错,要么一无所获 我最后一次尝试是:Javascript 在高地流中执行节点mysql查询,javascript,asynchronous,stream,node-mysql,highland.js,Javascript,Asynchronous,Stream,Node Mysql,Highland.js,我必须从输入文件中抽取行,转换它们并将它们放入输出文件中 因为输入文件很大,所以我使用HighlandJS流式传输它 转换步骤包括MySQL数据库中的异步查询(通过节点MySQL)和 我不知道如何在流中管理异步查询。我不同的尝试要么出错,要么一无所获 我最后一次尝试是: h(inputStream) .split() .through(JSONStream.parse()) .map(function (data) { h.wrapCallback(pool.query(data, fu
h(inputStream)
.split()
.through(JSONStream.parse())
.map(function (data) {
h.wrapCallback(pool.query(data, function (err, rows) {
return rows;
}));
})
.pipe(outputStream);
有关于如何做的提示吗
谢谢。简短回答:您的
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
转换来实现这一点,该转换将流“展平”为“正常”流
谢谢你的回答。它几乎成功了!但是我给了我这个错误:
TypeError:无法读取未定义的属性“connectionConfig”
我认为在包装池时这是一个上下文绑定问题。是否有特定的操作来保持上下文的完整性?请尝试pool.query.bind(pool)
。
// input -> map to a stream of rows -> output
h(input).flatMap(h.wrapCallback(pool.query)).pipe(output);