管道节点与高地js并行流

时间:2016-01-19 02:55:04

标签: javascript node.js stream highland.js

我有一系列异步节点流,我想并行使用是否有一种简单的方法在高地js中执行此操作?我试图让所有这些数组都通过聚合函数。

1 个答案:

答案 0 :(得分:2)

你想做这样的事情:

const request = require('request');
const nodeStreams = [request('http://www.example.com'),
                     request('http://www.example1.com')];

hl(nodeStreams)
.map(hl)
.merge()
.map(JSON.parse)
.each(console.log);

我将解释这里发生了什么。您从一组节点流开始,然后使用map将它们转换为Highland流,这样您现在就拥有了一个流流。然后merge函数将所有值合并为单个流。所有这些流都将被并行读取,但map(JSON.parse)只能一次调用它们。如果你想要对更多的计算进行并列化,那么你需要在调用merge之前对每个流进行同样的操作:

hl(nodeStreams)
.map(stream => hl(stream).map(JSON.parse))
.merge().each(console.log);

如果请求的顺序很重要,那么您应该使用parallel,但这会导致性能开销,因为该函数必须跟踪所有不同的流。