管道有错误事件

时间:2015-12-07 16:07:54

标签: javascript node.js events error-handling stream

在构建复杂的流管道时,将错误从一个阶段传递到下一个阶段通常是有意义的。 (在当前的情况下,我考虑了Gulp管道。)但显然Node.js流pipe方法并没有这样做。

可以手动将一个流的错误事件侦听器绑定到下一个流的错误事件发射器。但这很乏味。

是否有一些简单的方法来构建具有错误链接的管道?或者有一些原因导致人们不应该这样做吗?

示例:

var through = require("through2");

var s1 = through(function(chunk, enc, cb) {
    console.log("In 1: " + chunk.toString());
    cb(null, chunk);
});
var s2 = through(function(chunk, enc, cb) {
    console.log("In 2: " + chunk.toString());
    if (chunk.toString() === "error")
        cb(Error("Something broke"), null);
    else
        cb(null, chunk);
});
var s3 = through(function(chunk, enc, cb) {
    console.log("In 3: " + chunk.toString());
    cb(null, chunk);
});

s1.pipe(s2).pipe(s3)
    .on("data", function(chunk, enc) {
        console.log("Out: " + chunk.toString());
    })
    .on("error", function(err) {
        console.log("Final error: " + err);
    })
;

////////////////////////////////////////////////////
// The following two lines are the relevant part. //
s1.on("error", s2.emit.bind(s2, "error"));        //
s2.on("error", s3.emit.bind(s3, "error"));        //
////////////////////////////////////////////////////

s1.write("first");
s1.write("error");
s1.write("last");

1 个答案:

答案 0 :(得分:0)

  

是否有一些简单的方法来构建具有错误链接的管道?

bubble-stream-error提供了执行此操作的机制。

  

或者有什么理由不应该这样做吗?

不是我知道的。在许多情况下,这似乎是你想要做的事情。