所以我有一个tranfrom流,写入没有推送到另一个流,因为流改变它写入的内容。如果我连续多次写入同一个流,它在发出数据事件之前,将它们连接在一起
获取输入并将其输出到正确流的路由器。这使用stdio [3]来管道和stdio [4]来从子进程获取输入。
Controller.prototype._transform = function(chunk,enc,done)
{
let push = this.push.bind(this);
try
{
const input = JSON.parse(chunk.toString());
const task = nextTask(input.id);
if(task != null)
{
const pipe = getPipe(task.pipe);
let output = {};
if(!hasExpectedFields(task))
throw {err:stacks[input.id].name+ ' does not have expected fields passed to it for '+pipe.name,action:input.id};
if(!hasRequiredFields(task))
throw {err:stacks[input.id].name+ ' does not have required fields for '+pipe.name,action:input.id};
else
output = attachRequired(input,task,pipe);
(pipe.storable) ? output.store = task.store: output.store = null;
console.log();
if(pipe.started)
{
pipe.write(JSON.stringify(output))
}
else
{
pipe.startProcess();
pipe.write(JSON.stringify(output));
}
done();
}
else
{
const taskName = stacks[input.id].name;
console.log("task "+taskName+" is complete");
done();
}
}catch(e)
{
if(e.err)
console.log(e.err);
else
console.log(e);
done();
}
};
可以通过管道输送的众多管道之一。使用网络套接字从父进程传输。使用fs写入流来管道到父级。
Globber.prototype._transform = function(chunk,enc,done)
{
let push = this.push.bind(this);
try
{
task = JSON.parse(chunk.toString());
globby(task.regex).then(paths=>
{
task.input = paths;
task.regex = null;
(task.store) ? task[task.store] = task.input:null;
push(JSON.stringify(task));
done();
}).catch(x => console.log(x))
}catch(e)
{
console.log(e);
}
};