从JS流中重新发现错误

时间:2017-06-27 12:55:52

标签: javascript node.js

JS中的重新出现错误很容易:

try {
    //some code that fails
} catch(e) {
    throw getMyOwnErrorObj(e);
}

如何在nodejs流中实现此目的。 Afaik,我只能通过收听流的error事件来捕获错误。但是,如何捕获错误并重新抛出该错误(或其他错误)? 我当然可以使用我自己的流实现来包装流,以修改事件发射器的行为。但我正在寻找一个更有魅力的解决方案。

我的用例:

  • 我需要解析一些文件
  • 这些文件可能是gzipped,tarred,bzipped,其他内容,或者是这些文件的组合。读取流的前x个字节以决定首先使用哪个流
  • 由于流的顺序,类型和数量不固定,我使用pumpify来粘合'溪流在一起。 Pumpify将一组流组合成单个双工流,并发生单个错误事件。即,这个lib将另一个错误监听器附加到我的流。

我想要工作的一个简单例子是:

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。根据最新评论的用例和示例进行了更新

0 个答案:

没有答案