Электронное приложение, выбрасывающее «_transform () метод не реализован» ошибка - PullRequest
0 голосов
/ 08 января 2020
(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();
    }
}
...