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',…)
事件侦听器时,流会自动切换到流模式。