如何将两个分叉合并回一个流,并在highlandjs中消耗



当使用highlandjs创建流时,我知道我可以这样使用它:

import * as high from "highland";
console.log("Single stream:");
const stream0 = high([1, 2, 3, 4, 5]);
stream0.each(console.log); // each number will be printed

现在我想把这个流分成两个,对它们都做点什么,然后把两个分叉合并成一个流。(或者换一种说法:我想把流分成两部分,但他们的操作结果应该是相同的响应流。(

然而,我无法让它发挥作用。这个例子非常做作,但展示了我的问题:

import * as high from "highland";
const stream = high([1, 2, 3, 4, 5]);
const fork1 = stream.fork().filter(i => i % 2 === 0);
const fork2 = stream.fork().filter(i => i % 2 !== 0);
const result = fork1.concat(fork2);
result.each(console.log); // doesn't do anything

然后暂停结果流。我认为只有在所有的fork都开始处理输入流之后,它才能启动fork,但我不确定如何启动它。

我会使用merge进行此操作:

const high = require('highland')
const stream = high([1, 2, 3, 4, 5])
const fork1 = stream.fork().filter(i => i % 2 === 0)
const fork2 = stream.fork().filter(i => i % 2 !== 0)
high([fork1, fork2]).merge().each(console.log) // 1 2 3 4 5

在定义分叉和凹陷之后,我通过恢复源流使其工作:

const stream = high([1, 2, 3, 4, 5]);
const fork1 = stream.fork().filter(i => i % 2 === 0);
const fork2 = stream.fork().filter(i => i % 2 !== 0);
const result = fork1.concat(fork2);
stream.resume(); // starts the source stream!
result.each(console.log); // doesn't do anything

现在它将打印每个值(无序,但这是意料之中的(:

2
4
1
3
5

相关内容

最新更新