Angular Electron app抛出“未实现_transform()方法”错误
我正在尝试使用node js stream包创建一个自定义解析器, 当我尝试使用Angular Electron app抛出“未实现_transform()方法”错误,angular,typescript,electron,nodes,nodejs-stream,Angular,Typescript,Electron,Nodes,Nodejs Stream,我正在尝试使用node js stream包创建一个自定义解析器, 当我尝试使用const Transform=window.require('electron').remote.require('stream').Transform导入流包时,它抛出了如上所述的错误,即使类中已经存在_Transform方法 如果我只是使用const Transform=require('stream')。Transform的工作很好,但是根据我的要求,我只想使用electron.remote导入它,所以有人可
const Transform=window.require('electron').remote.require('stream').Transform导入流包时,它抛出了如上所述的错误,即使类中已经存在_Transform方法
如果我只是使用const Transform=require('stream')。Transform的工作很好,但是根据我的要求,我只想使用electron.remote导入它,所以有人可以帮我解决这个问题
custom-parser.ts如下所示:
(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)
const Transform=window.require('electron').remote.require('stream').Transform
导出类CustomParser扩展了转换{
收入数据:任何=[];
坏数据包:any=[];
packetStartByte=55
packetEndByte='aa'
构造函数(){
超级();
}
/**
*从串行端口获取传入的数据包并进行相应的处理。
*
*@param{Buffer}块
*@param{*}编码
*@param{*}cb
*@memberofcustomparser
*/
_转换(块:缓冲区,编码:任意,cb:任意){
如果(块){
chunk.forEach((字节:any)=>{
this.incomingData.push(byte.toString(16))
});
如果(this.incomingData.length>=10){
设指数=0;
this.incomingData.forEach((字节:any)=>{
让packetEndIndex=index+10-1
if(packetEndIndexparseInt(字节,16));
const buffer=buffer.from(十进制数组)
这个。推(缓冲区)
指数+=10
}否则{
this.badpackes.push(this.incomingData[index])
指数+=1
}
}
});
此.incomingData.splice(0,索引);
this.push(Buffer.from(this.badpackages))
this.badpackages=[]
};
}
cb();
}
_冲洗(cb:任何){
this.incomingData=[];
this.push(this.incomingData);
cb();
}
}
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();
}
}