当前位置: 首页 > 面试题库 >

从可读流中读取对象会导致TypeError异常

商茂勋
2023-03-14
问题内容

我正在尝试使以下代码起作用:

var stream = require('stream');

class MyReadable extends stream.Readable {
  constructor(options) {
    super(options);
  }
  _read(size) {
    this.push({a: 1});
  }
}

var x = new MyReadable({objectMode: true});
x.pipe(process.stdout);

根据node.js的Streams文档,由于
objectMode 选项设置为 true因此 从此类流中读取非字符串/非Buffer对象应该没有问题。但是我最终遇到了以下错误:

TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string or Buffer
    at validChunk (_stream_writable.js:253:10)
    at WriteStream.Writable.write (_stream_writable.js:288:21)
    at MyReadable.ondata (_stream_readable.js:646:20)
    at MyReadable.emit (events.js:160:13)
    at MyReadable.Readable.read (_stream_readable.js:482:10)
    at flow (_stream_readable.js:853:34)
    at resume_ (_stream_readable.js:835:3)
    at process._tickCallback (internal/process/next_tick.js:152:19)
    at Function.Module.runMain (module.js:703:11)
    at startup (bootstrap_node.js:193:16)

如果将 this.push({a:1}) 更改为,比如说 this.push(’abc’), 那么一切都会像 超级按钮
一样工作,并且我的控制台窗口中充满了’abc’。

另一方面,如果我将 objectMode 设置为 false 并且仍然尝试推送诸如 {a:1}之 类的对象,则错误消息将更改为:

TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string, Buffer, or Uint8Array

因此, objectMode 确实会更改某些内容,但并不完全符合我的预期。

我正在使用9.4.0版本的node.js。


问题答案:

stacktrace指示问题不在于Readable流中,而在于将Writable其用管道传递到(process.stdout)的流中。

将其替换为WritableobjectMode设置为的流,true您的错误就会消失。

var stream = require('stream');

class MyReadable extends stream.Readable {
  constructor(options) {
    super(options);
  }
  _read(size) {
    this.push({a: 1});
  }
}

class MyWritable extends stream.Writable {
  constructor(options) {
    super(options);
  }
  _write(chunk) {
    console.log(chunk);
  }
}

var x = new MyReadable({objectMode: true});
x.pipe(new MyWritable({objectMode: true}));


 类似资料:
  • 问题内容: 我有一个ReactJS HTML表格组件,并使用方法更新了它的内容(单元格值)。这是基本代码: 您可以这样使用它: 大部分时间都在工作。我可以通过执行以下操作来更改数据(在函数中的某处): 如您所见,它将在表的末尾添加一行。但是,如果我尝试在此更新后设置初始数据,或者以任何方式通过设置为较小的数组(例如应删除最后一行)来 缩短 行数: 我收到此错误: TypeError:updated

  • 问题内容: 我正在寻找一个JSON分析器,该分析器可以让我从大型JSON文件(大小为几百MB)中遍历JSON对象。我从Json.NET尝试了JsonTextReader,如下所示: 但是它在令牌之后返回令牌。 如果我需要整个对象而不是令牌,有没有更简单的方法? 问题答案: 假设您有一个与此类似的json数组: 我将为对象类型声明一个类 现在,反序列化部分 还有一个伪JsonConverter类来拦

  • 我正在连载: 和反序列化:

  • 大家好,我正在编写一个java程序,在这个程序中,我需要随机读取添加到向量中的对象,并且不应该重复。事实上,我想通过数学得到一个随机数。随机向量。size()并且为了避免重复,请将随机数保留在数组中,或者下次不要再读取它,但我猜肯定有一种方法或某种东西可以用于此目的。。。我会感谢你的任何回复

  • 在我的main(一个名为VehicleDriverClass的seperate类)中,我试图使用I/O将车辆数据写入文件,并从文件中读取车辆数据。我可以写一个文件罚款。我正在使用记事本和一个。txt文件来读取。我遇到的问题是,当从文件中读取时,如何终止一行的结尾。这里是Vehicle类的构造函数,所以您知道Paramaters。 这就是我目前的输入法(不试图创建oject,只是从文件中读取)。传递

  • 我正在编写一个API控制器,用于接收和解析JSON异步帖子的内容,但无法读取该帖子中StringContent对象的内容。 这是我的API控制器中我希望看到值的部分。到达ApiController方法的值为null。jsonContent值是一个空字符串。我希望看到的是JSON对象的内容。 这是我的控制器来显示它是如何被调用的。 这就是发布方法。 我怀疑ApiController中Post方法的签