在构建复杂的流管道时,将错误从一个阶段传递到下一阶段通常是有意义的。 (在目前的情况下,我正在考虑 Gulp 管道。)但显然 Node.js 流 pipe
方法不会这样做。
可以手动将一个流的错误事件监听器绑定(bind)到下一个流的错误事件发射器。但这是相当乏味的。
是否有一些简单的方法来构建带有错误链的管道?或者有什么理由不应该这样做?
示例:
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");
最佳答案
Is there some easy way to build pipelines with error chaining?
bubble-stream-error提供了一种机制来做到这一点。
Or is there some reason why one shouldn't do this?
据我所知。在许多情况下,这似乎是您合理想要做的事情。
关于javascript - 带有错误事件的管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34138022/