javascript - 带有错误事件的管道

标签 javascript node.js events error-handling stream

在构建复杂的流管道时,将错误从一个阶段传递到下一阶段通常是有意义的。 (在目前的情况下,我正在考虑 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/

相关文章:

C# INotifyPropertyChanged 处理程序

wpf - DataGrid 通过单击 UpdateSourceTrigger = SourceUpdated 捕获单元格值更改事件

javascript - 如何将 innerHTML 与 createTextNode 一起使用?

javascript - 如何阻止 jQuery Mobile 按钮组溢出?

node.js - 错误 : EACCES: permission denied

javascript - 对 JSON 字符串的 JSON 解析抛出 "Cannot convert object to primitive value"

javascript - 在 Node.js 中处理 "raw data"并在 Node Express 端点中传递数据

javascript - 带有 useState 钩子(Hook)的 React 功能组件立即执行函数

php - 关闭选项卡时清除 SESSION 变量

javascript - 当错误可能未包含在 promise 中时,我如何使用 promise 来捕获错误?