微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我通过管道将自定义可读流传输到自定义可写流。 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 举报,一经查实,本站将立刻删除。