(node:15092) UnhandledPromiseRejectionWarning: Error [ERR_METHOD_NOT_IMPLEMENTED]: The _transform() method is not implemented
at Transform._transform (_stream_transform.js:164:6)
at Transform._read (_stream_transform.js:189:10)
at Transform._write (_stream_transform.js:177:12)
at doWrite (_stream_writable.js:418:12)
at writeOrBuffer (_stream_writable.js:402:5)
at Transform.Writable.write (_stream_writable.js:302:11)
at SerialPort.ondata (_stream_readable.js:720:22)
Я пытаюсь использовать потоковый пакет node js для создания собственного анализатора, когда я пытался импортировать потоковый пакет, используя const Transform = window.require('electron').remote.require('stream').Transform
, он выдает ошибку, как указано выше, даже если метод _transform уже присутствует в классе.
Если я просто использую const Transform = require('stream').Transform
, он работает нормально, но согласно моему требованию я хочу импортировать его только с помощью Electron.remote, так что кто-то может мне помочь в этом.
custom- parser.ts следующим образом:
const Transform = window.require('electron').remote.require('stream').Transform
export class CustomParser extends Transform {
incomingData: any = [];
badPackets: any = [];
packetStartByte = 55
packetEndByte = 'aa'
constructor() {
super();
}
/**
*takes incoming packetes from serial port and process accordingly.
*
* @param {Buffer} chunk
* @param {*} encoding
* @param {*} cb
* @memberof CustomParser
*/
_transform(chunk: Buffer, encoding: any, cb: any) {
if (chunk) {
chunk.forEach((byte: any) => {
this.incomingData.push(byte.toString(16))
});
if (this.incomingData.length >= 10) {
let index = 0;
this.incomingData.forEach((byte: any) => {
let packetEndIndex = index + 10 - 1
if (packetEndIndex < this.incomingData.length) {
if (this.incomingData[index] == this.packetStartByte && this.incomingData[packetEndIndex] == this.packetEndByte) {
const hexByteArray = this.incomingData.slice(index, packetEndIndex + 1)
const decimalByteArray: [] = hexByteArray.map((byte: string) => parseInt(byte, 16));
const buffer = Buffer.from(decimalByteArray)
this.push(buffer)
index += 10
} else {
this.badPackets.push(this.incomingData[index])
index += 1
}
}
});
this.incomingData.splice(0, index);
this.push(Buffer.from(this.badPackets))
this.badPackets = []
};
}
cb();
}
_flush(cb: any) {
this.incomingData = [];
this.push(this.incomingData);
cb();
}
}