Node.js 流“结束”事件未触发

Mon*_*ono 8 javascript stream node.js

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

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...
})
Run Code Online (Sandbox Code Playgroud)

如果我在 ogr2ogr 转换后创建写入 -> 读取流,则该过程有效。

And*_*nak 4

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

请注意,除非数据完全消耗,否则“结束”事件不会触发。这可以通过切换到流动模式或重复调用stream.read()直到读完来完成

  • 我知道这个答案已经有近 3 年历史了,但无论如何:相同的[文档页面](https://nodejs.org/api/stream.html#stream_two_reading_modes)说,当“流”时,流会自动切换到流动模式添加了 .on('data', ...)` 事件监听器。 (8认同)