Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js流';结束';事件未触发_Javascript_Node.js_Stream - Fatal编程技术网

Javascript Node.js流';结束';事件未触发

Javascript Node.js流';结束';事件未触发,javascript,node.js,stream,Javascript,Node.js,Stream,以下数据流不会触发“结束”事件。“数据”事件被触发,我可以看到记录到控制台的每个数据行 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 st

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

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转换后创建一个写->读流,那么这个过程就可以工作。

看看文档:


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

谢谢!我会尝试切换到流动模式,但我仍然不明白为什么在某些情况下调用“end”事件而不切换到流动模式(例如,当我将文件写入磁盘并在使用JSONStream之前启动另一个readableStream时)。我知道这个答案已经有3年了,但是无论如何:同样的,当添加
stream.on('data',…)
事件侦听器时,流会自动切换到流模式。