2016-03-21 30 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 
    } 
} 

用這種方法,你有固定的管道,但你可以隨時改變流量。