Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在高地流中执行节点mysql查询_Javascript_Asynchronous_Stream_Node Mysql_Highland.js - Fatal编程技术网

Javascript 在高地流中执行节点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

我必须从输入文件中抽取行,转换它们并将它们放入输出文件中

因为输入文件很大,所以我使用HighlandJS流式传输它

转换步骤包括MySQL数据库中的异步查询(通过节点MySQL)和 我不知道如何在流中管理异步查询。我不同的尝试要么出错,要么一无所获

我最后一次尝试是:

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);