节点流在运行之前连接块

时间:2017-08-11 19:19:57

标签: javascript node.js

所以我有一个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);
}
};

0 个答案:

没有答案