【问题标题】:Detecting end of stream on streams2检测streams2上的流结束
【发布时间】:2014-08-14 01:50:59
【问题描述】:

我刚刚读到,如果流使用 'data''end' 侦听器,它会切换到“经典”模式,stream-handbook 说:

请注意,每当您注册“数据”侦听器时,都会将流 进入兼容模式,这样您就失去了新流的好处2 接口

那么,利用新流 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' listener 的情况下做同样的事情

【问题讨论】:

    标签: node.js coffeescript gulp node.js-stream


    【解决方案1】:

    仅调用.resume()/.pause() 或添加“数据”侦听器会将streams2 流切换到streams1 流。您可以在不影响任何内容的情况下收听“结束”。

    在您的特定示例中,即使它确实切换它也不会影响您,因为您只是管道,它在流 1 和流 2 模式下都适用。

    此外,如果最后一个流 (gulp.dest "./bin/server") 不是双工流或者您不使用其中的数据,您可能看不到“结束”事件。如果它只是一个 Writable 流,则应改为侦听“finish”(“end”仅在 Readable 流上发出)。

    【讨论】:

    • 是的,但是如果流根本没有'end' 事件我该怎么办?有没有办法检测到它的结束?
    • 如果最后一个流 (gulp.dest "./bin/server") 只是一个可写流,那么您应该改为监听“完成”。 'end' 仅适用于可读流。
    • on 'end' 更改为on 'finish' 对我不起作用
    • 尝试在 .on 'end'/.on 'finish' 处理程序之后附加 .resume()。事实证明,gulp.dest 返回一个 Duplex 流(允许您通过管道连接到其他 gulp 流),需要将其排空才能获得您正在寻找的事件,调用 resume() 是一种简单的方法这样做。
    猜你喜欢
    • 1970-01-01
    • 2012-10-13
    • 2012-06-22
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多