добавить в середине узла потока трубы JS - PullRequest
0 голосов
/ 05 марта 2019

Я сейчас создаю приложение планирования в nodeJS.

У меня есть шаблон расписания, который я хотел бы генерировать динамически. Я знаю, что это возможно с потоком, более конкретно с каналами, хотя я не могу заставить его вводить код в середине потока.

Что я пробовал:

var through2 = require( "through2" );
input.pipe(through2(function (chunk, encoding, done){
            var transformChunk = chunk.toString()
            console.log(transformChunk);

            if (transformChunk.includes("\\newDay{}{}")){
                transformChunk += "newDay{12}{12}";
                this.push(transformChunk);
            }



            done();
        }))

это просто ничего не меняет.

Я также пытался создать свой собственный класс преобразования

const { Transform } = require('stream');

        class injectText extends Transform {

            constructor(string){
                super();
                this.replaceString = string;
            }

            _transform(chunk, encoding, callback) {
                // var transformChunk = chunk.toString().replace("newDay{}{}", this.replaceString);
                var transformChunk = chunk.toString()
                if (transformChunk.includes("newDay{}{}")){

                    transformChunk += "newDay{12}{12}";

                }

                this.push(transformChunk)
                console.log(transformChunk);
                callback();
            }

        };

        var changedStream = new injectText('newDay{11}{11}');

но это только добавляет к концу пара.

Замена строки работает только для одной строки.
Моя проблема в том, что мне нужно заменить эту одну строку несколькими новыми строками.

1 Ответ

0 голосов
/ 27 марта 2019

Можно ли использовать для этого асинхронный генератор (async *function) и асинхронный итератор (for await)? Это было бы примерно так:

async *inputGenerator() {
    for await (const chunk of input) {
        var transformedChunk = chunk.toString();
        if (transformedChunk.includes("\\newDay{}{}")){
            transformedChunk += "newDay{12}{12}";
        }
        yield transformedChunk;
     }
}

// do something with the transformed input
for await (const chunk of inputGenerator()) {
    .....
}

Асинхронные итераторы доступны на ES2018 / Node 10

...