Javascript 从JS流中重试错误

Javascript 从JS流中重试错误,javascript,node.js,Javascript,Node.js,在JS中重新引用错误很容易: try { //some code that fails } catch(e) { throw getMyOwnErrorObj(e); } 如何在nodejs流中实现这一点。好了,我只能通过监听流的error事件来捕获错误。但是如何捕捉错误并重新显示该错误(或其他错误)? 当然,我可以用自己的流实现包装流,修改事件发射器的行为。但我正在寻找一个更迷人的解决方案 我的用例: 我需要解析一些文件 这些文件可以是gzip、tarred、bzipped

在JS中重新引用错误很容易:

try {
    //some code that fails
} catch(e) {
    throw getMyOwnErrorObj(e);
}
如何在nodejs流中实现这一点。好了,我只能通过监听流的
error
事件来捕获错误。但是如何捕捉错误并重新显示该错误(或其他错误)? 当然,我可以用自己的流实现包装流,修改事件发射器的行为。但我正在寻找一个更迷人的解决方案

我的用例:

  • 我需要解析一些文件
  • 这些文件可以是gzip、tarred、bzipped或其他文件,也可以是这些文件的组合。读取流的前x字节以决定首先使用哪个流
  • 由于流的顺序、类型和数量不是固定的,所以我使用将流“粘合”在一起。Pumpify将一组流组合成一个双工流,并带有一个错误事件。也就是说,这个库将另一个错误侦听器附加到我的流
我想工作的一个简单例子是:

var pumpify = require("pumpify");
var tar = require("tar-fs");
var zlib = require("zlib");
var fs = require("fs");

var untar = pumpify(
  zlib.createGunzip().on("error", function(e) {
    //I'd like to rethrow an error here, so other error event listeners will catch _my_ error
     //this below doesnt work (Maximum call stack size exceeded)
     this.emit('error', new MyError(e));
  }),
  tar.extract("output-folder")
);
fs.createReadStream("./some-file-that-isnt-gzipped").pipe(untar).on("error", function(e) {
  //I'd like e to be intanceof MyError here...
});

ps.根据最新评论更新了用例和示例

您能展示一个用例吗?看看你有没有试着把错误发回来?你能展示一个用例吗?看看你有没有试着把错误发回来?