节点 - 使用管道时如何区分来自可读和可写流的错误?

问题描述

我通过管道将自定义可读流传输到自定义可写流。 pipeline / pipe 方法获取 Readable 和 Writable 的 error 事件。

我如何知道我从管道中得到的错误是来自 Readable 还是 Writable?

我可以监听 Readable\Writable on error 事件,但是从管道本身接收到相同的错误事件,所以我得到了 2 到 3 次,然后很难比较我从他们那里得到的和什么我从管道中得到的。我希望有更好的方法解决它。

在下面的示例中,取消注释第一个注释以从可读中获取错误,并取消注释第二个注释以从可写中获取错误

const { Readable,Writable,pipeline } = require('stream');
const fs = require('fs/promises')
const { promisify } = require('util')

const customreadable = new Readable({ objectMode: true,read(){} });
customreadable.push({ name: 'file1',content: 'hello world' });
customreadable.push({ name: 'file2',content: 'hello world2' });
// customreadable.destroy(new Error('Error from Readable'));

class CustomWritable extends Writable {
  constructor() {
    super({ objectMode: true });
  }
  async _write(obj,_,callback) {
    try {
      // throw new Error('Error from Writeable');
      await fs.writeFile(obj.name,obj.content);
      callback();
    } catch (err) {
      callback(err);
    }
  }
}

const pipelinePromise = promisify(pipeline);

pipelinePromise(customreadable,new CustomWritable())
  .then(() => {
    console.log('completed successfully');
  })
  .catch(err => {
    console.error('pipeline found an error',err);
  })

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)