我目前正在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}');
但这只会增加更多的麻烦。
字符串替换仅适用于一行。
我的问题是我需要用多行新行替换该行。
答案 0 :(得分:0)
是否可以为此使用异步生成器(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上可用