Tôi cần chạy hai lệnh nối tiếp cần đọc dữ liệu từ cùng một luồng. Sau khi chuyển một luồng vào một luồng khác, bộ đệm bị trống vì vậy tôi không thể đọc lại dữ liệu từ luồng đó nên điều này không hoạt động:
var spawn = require('child_process').spawn;
var fs = require('fs');
var request = require('request');
var inputStream = request('http://placehold.it/640x360');
var identify = spawn('identify',['-']);
inputStream.pipe(identify.stdin);
var chunks = [];
identify.stdout.on('data',function(chunk) {
chunks.push(chunk);
});
identify.stdout.on('end',function() {
var size = getSize(Buffer.concat(chunks)); //width
var convert = spawn('convert',['-','-scale',size * 0.5,'png:-']);
inputStream.pipe(convert.stdin);
convert.stdout.pipe(fs.createWriteStream('half.png'));
});
function getSize(buffer){
return parseInt(buffer.toString().split(' ')[2].split('x')[0]);
}
Yêu cầu phàn nàn về điều này
Error: You cannot pipe after data has been emitted from the response.
và thay đổi inputStream để fs.createWriteStream
tạo ra cùng một vấn đề tất nhiên. Tôi không muốn ghi vào tệp nhưng sử dụng lại theo một cách nào đó luồng mà yêu cầu tạo ra (hoặc bất kỳ cách nào khác cho vấn đề đó).
Có cách nào để sử dụng lại luồng có thể đọc được sau khi hoàn thành đường ống không? Cách tốt nhất để đạt được điều gì đó giống như ví dụ trên là gì?