在将“ end”设置为“ false”的情况下对流进行管道解析可写流完成之前

时间:2019-11-07 02:04:01

标签: javascript node.js

我编写了一个函数,该函数在传递可读流之后返回已解决的Promise。有两个管道。第一个管道是转换,第二个管道是可写流。我不想关闭可写流,因此我在writer / pipe参数中传递了{end:false}。转换和可写流独立工作(即,仅一个管道),但是当我链接它们时却不能。

根据我所看到的所有示例,为了知道该过程何时完成,我添加了readable.on('end')。无法正常工作。

pipe(readable, transform, writable){
    return new Promise((resolve, reject) => {
        readable
            .pipe(transform)
            .pipe(writable, {end:false})
            .on('error', (error) => {
                console.error(error)
                reject(error);
            })
        readable.on('end', () => {
                writable.end();
                resolve();
            });
    });
}
  1. 如果我呼叫writable.end(),则不会将任何内容写入文件
  2. 如果我不打电话给writable.end(),实际上它确实可以完成应做的事情,但是它过早地解决了Promise方法。文件仍在写入中。
  3. 如果我不使用{end:false}并正常进行操作,则效果很好。问题是我希望可写流保持打开状态。

1 个答案:

答案 0 :(得分:0)

尝试所有事件后,我需要使用select device_id, max(value) filter (where metric_name = 'speed') as max_speed, avg(value) filter (where metric_name = 'speed') as avg_speed, count(value) filter (where metric_name = 'tripDuration') as number_of_trips from metric_history group by device_id 处理程序来指示编写已完成。

writable.on('unpipe')