Javascript管道未捕获我抛出的错误

Javascript管道未捕获我抛出的错误,javascript,error-handling,pipeline,Javascript,Error Handling,Pipeline,我有一个管道,在其中一个转换中我抛出了一个错误,我想以某种方式捕捉它 _transform(chunk,encoding,done) { let strChunk = decoder.write(chunk); if(strChunk === '\u0003') process.exit(); let felem = JSON.parse(strChunk); let seq = felem.seq.replace(/\s+/g, '');

我有一个管道,在其中一个转换中我抛出了一个错误,我想以某种方式捕捉它

_transform(chunk,encoding,done) {
    let strChunk = decoder.write(chunk);
    if(strChunk === '\u0003')
        process.exit();
    let felem = JSON.parse(strChunk);
    let seq = felem.seq.replace(/\s+/g, '');
    this.type = "nucleotide";
    for(let i=0; i<this.checkMax && i<seq.length; i++) {
        let c = seq[i];
        if(!(c in this.nucleotides) && (c in this.aminoacids)) {
            this.type = "aminoacid";
            felem["type"]=this.type;
            if((this.forward === "both") || (this.forward === this.type))
                this.push(JSON.stringify(felem));             
            break;
        } else {
            if(!(c in this.nucleotides) && !(c in this.aminoacids) && !(c in this.permissables)) {
                throw new Error("Unexpected character in sequence (" + felem.def + "): " + c + ".");
            }
        }

    }
    done();
}
不幸的是,非.on('error'或err=>函数正在启动,我得到了未捕获的错误:…加上堆栈跟踪: 第一行是指我抛出错误的位置

  at FASTASeqType._transform (h:\Code\ios\src\FASTA\FASTASeqType.js:41:27)
  at FASTASeqType.Transform._read (_stream_transform.js:191:10)
  at FASTASeqType.Transform._write (_stream_transform.js:179:12)
  at doWrite (_stream_writable.js:403:12)
  at writeOrBuffer (_stream_writable.js:387:5)
  at FASTASeqType.Writable.write (_stream_writable.js:318:11)
  at FASTAElement.ondata (_stream_readable.js:695:22)
  at addChunk (_stream_readable.js:286:12)
  at readableAddChunk (_stream_readable.js:268:9)
  at FASTAElement.Readable.push (_stream_readable.js:209:10)
  at FASTAElement.Transform.push (_stream_transform.js:152:32)
  at FASTAElement._transform (h:\Code\ios\src\FASTA\FASTAElement.js:27:22)
  at FASTAElement.Transform._read (_stream_transform.js:191:10)
  at FASTAElement.Transform._write (_stream_transform.js:179:12)
  at doWrite (_stream_writable.js:403:12)
  at writeOrBuffer (_stream_writable.js:387:5)
  at FASTAElement.Writable.write (_stream_writable.js:318:11)
  at Transform.ondata (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_readable.js:681:20)
  at addChunk (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_readable.js:298:12)
  at readableAddChunk (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_readable.js:280:11)
  at Transform.Readable.push (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_readable.js:241:10)
  at Transform.push (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_transform.js:139:32)
  at push (h:\Code\ios\src\node_modules\split2\index.js:65:10)
  at Transform.transform [as _transform] (h:\Code\ios\src\node_modules\split2\index.js:43:5)
  at Transform._read (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_transform.js:177:10)
  at Transform._write (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_transform.js:164:83)
  at doWrite (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_writable.js:409:139)
  at writeOrBuffer (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_writable.js:398:5)
  at Transform.Writable.write (h:\Code\ios\src\node_modules\readable-stream\lib\_stream_writable.js:307:11)
  at ReadStream.ondata (_stream_readable.js:695:22)
  at addChunk (_stream_readable.js:286:12)
  at readableAddChunk (_stream_readable.js:268:9)
  at ReadStream.Readable.push (_stream_readable.js:209:10)
  at internal/fs/streams.js:210:12
  at FSReqCallback.wrapper [as oncomplete] (fs.js:488:5)

怎么办?

如果错误与流相关,则需要分别为读流和写流添加
错误
事件处理程序

let inStream = fs.createReadStream("../files/bad.fasta").on('error', (err) => console.log(err));
let outStream = fs.createWriteStream("../files/bad_typed.fasta").on('error', (err) => console.log(err));

请记住,如果您有更多的流,则每个流都必须单独处理。

我应用了该建议(请参见代码编辑)。但是,没有调用任何.on错误处理程序。您是否尝试过
expect(pipeline(…).to.throw();
?我拉出管道并将其命名为
函数pip(){pipeline(…);
。然后我执行了
expect(pip).to.throw(“…”)
;未捕获的错误消息消失了,但仍然没有在任何地方捕获到错误,我得到:
AssertionError:expected[Function:pip]要从mocha抛出一个错误
。您需要调用它,请在我将
expect(pip()).to.throw(“…”
改为.throw(“…”);I get:`AssertionError:expected undefined to a function`。因此我认为chai希望调用函数本身。请参阅:只是将所有内容包装在try..catch中。没有更改。它与使用mocha有什么关系吗?
let inStream = fs.createReadStream("../files/bad.fasta").on('error', (err) => console.log(err));
let outStream = fs.createWriteStream("../files/bad_typed.fasta").on('error', (err) => console.log(err));