使用运行时逻辑链接节点.js流

Chaining Node.js streams with run-time logic

本文关键字:节点 js 链接 运行时      更新时间:2023-09-26

在过去的 6 个月左右的时间里,我一直在使用 Node.js 流,到目前为止我对它们非常满意。到目前为止,我遇到的所有问题,我已经能够使用以下标准模板解决:

A.pipe(B).pipe(C);

但是,我目前的问题需要根据运行时逻辑链接不同的流"管道"。例如,我想做的是如下所示:

var basePipeline = A.pipe(B).pipe(C);
if(flowRate > 0.0) {
    basePipeline.pipe(D).pipe(E).pipe(F);
} else {
    basePipeline.pipe(G).pipe(H).pipe(I);
}

以上可能吗?或者,我是否需要以完整的方式分别创建两个流:

if(flowRate > 0.0) {
    A.pipe(B).pipe(C).pipe(D).pipe(E).pipe(F);
} else {
    A.pipe(B).pipe(C).pipe(G).pipe(H).pipe(I);
}

感谢您的建议!

你可以做的是始终传递所有流,但是,如果此步骤必须运行或跳过,则保留一个存储的数组。例如:

如果你的管道是这样的A

-> B -> C -> D -> E -> F -> H

你有一个哈希

A:0
B:1
C:0
D:1
...
...

这意味着您将只运行管道 B 和 D。

在管道开始时,您检查当前管道是否在哈希中

// step B
pipe(function(data)){
    if(steps['B'] === 1){
       // do something
    }
}

使用这种方法,您有固定的管道,但您可以动态更改流量。