2016-03-04 105 views
1

以下数据流不会触发“结束”事件。 'data'事件被触发,我可以看到记录到控制台的每一行数据。的Node.js流“结束”事件不触发

var AWS = require('aws-sdk'); 
var ogr2ogr = require('ogr2ogr'); 
var JSONStream = require('JSONStream'); 

var S3 = new AWS.S3(); 
var source = S3.getObject({bucket: ..., key: ...}).createReadStream(); 

var stream = ogr2ogr(source).format("GeoJSON").stream() 
    .pipe(JSONStream.parse('features.*')); 

stream.on('data', function(data){ 
    console.log(data);    // Correctly outputs 70 rows of data. 
}) 

stream.on('end', function(){ 
    console.log('end');   // This code is never executed. 
})  

stream.on('error', function(err){ 
    console.log(err);    // No errors... 
}) 

如果我在ogr2ogr转换后创建了写 - >读流,则该流程将起作用。

回答

1

看看文档:https://nodejs.org/api/stream.html#stream_event_end

Note that the 'end' event will not fire unless the data is completely consumed. This can be done by switching into flowing mode, or by calling stream.read() repeatedly until you get to the end

+0

谢谢!我给一个尝试,切换到流动的模式,但我还是不明白,为什么在某些情况下,“端”事件被称为无需切换到流模式(当我将文件写入磁盘,使用前JSONStream启动另一个readableStream例如)。 – Mono