2016-03-21 32 views
0

过去6个月左右,我一直在使用Node.js流,到目前为止我对它们非常满意。所有我遇到的问题,到目前为止,我已经能够使用的标准模板来解决:使用运行时逻辑链接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); 
} 

感谢您的建议!

+0

由于管道函数返回的方式,您应该能够以这种方式链接它们。因为pipe()。pipe()工作,因为第二个管道从第一个管道的返回值运行,因此如果您将该返回值存储起来,那么如果您将.pipe放在它的末尾,它将工作得完全相同。 – Binvention

回答

1

你可以做的事情总是通过所有的流, 但是如果这个步骤必须运行或跳过,你需要保存一个数组。 例如:

如果你的管道是这样 甲 - >乙 - “ç - > d - >电子 - >的F - >^h

而且你有一个哈希

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

这意味着你将只运行管道B和D.

在开始管你检查,如果当前管道是哈希

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

用这种方法,你有固定的管道,但你可以随时改变流量。