2014-06-23 63 views
0

流的末尾我剛纔讀,如果流使用'data''end'聽衆切換到「經典」模式,stream-handbook說:檢測上streams2

請注意,只要你註冊一個「數據」的聽衆,你放流 到兼容模式,這樣就失去了新streams2 API

那麼什麼是使用新的API流收益的最佳方式的好處是什麼?如果我目前做的:

gulp.src(["./src/server/**/*.coffee"]) 
    .pipe(coffee bare: true).on("error", gutil.log) 
    .pipe(gulp.dest "./bin/server") 
    .on 'end',-> gutil.log "successfully compiled server coffeescript" 

我如何做同樣的事情無需註冊'end'聽衆

回答

1

只有調用.resume()/.pause()或添加一個「數據」監聽器將streams2流切換到streams1流。您可以在不影響任何內容的情況下傾聽「結束」。

在您的特定示例中,即使它切換了,它也不會影響您,因爲您只是管道系統,可以在stream1和streams2模式下工作。

此外,如果最後一個數據流(gulp.dest "./bin/server")不是雙工數據流,或者您沒有使用數據,則可能看不到「結束」事件。如果它只是一個可寫入流,則應該監聽'完成'而不是('結束'僅在可讀流上發出)。

+1

是的,但是如果一個流根本沒有「end」事件,我該怎麼辦?有沒有辦法檢測它的結束? – Agzam

+0

如果最後一個流('gulp.dest「./bin/server」')只是一個Writable流,那麼你應該聽取'finish'。 '結束'僅適用於可讀流。 – mscdex

+0

將'on'end''改爲'on'finish''對我無效 – Agzam