Sto cercando di estrarre un file .tar (compresso da una directory) e quindi controllare i nomi dei file nella directory estratta. Sto usando tar-fs per estrarre il file tar e quindi utilizzare fs.createReadStream per manipolare i dati. Ecco cosa ho ottenuto finora:File system nodo js: evento finale non chiamato per flusso leggibile
fs.createReadStream(req.files.file.path)
.pipe(tar.extract(req.files.file.path + '0'))
.on('error', function() {
errorMessage = 'Failed to extract file. Please make sure to upload a tar file.';
})
.on('entry', function(header, stream, callback) {
console.error(header);
stream.on('end', function() {
console.error("this is working");
});
})
.on('end', function() {
//the one did not get called
console.error('end');
})
;
Speravo di estrarre l'intera cartella e quindi controllare i nomi dei file. Beh, non sono ancora arrivato così lontano.
A quanto mi risulta, ho ottenuto un flusso leggibile dopo la pipa. E un flusso leggibile ha un evento finale? La mia domanda è: perché l'evento end
nel codice non viene chiamato?
Grazie!
Ciao @hassansin Grazie per la direzione! Ancora una domanda, 'Gli eventi di fine e fine sono rispettivamente delle classi genitore scrivibile e leggibile. La prima frase sta dicendo finitura per Writable e finisce per Leggibile, giusto? 'L'evento di fine viene attivato dopo che viene chiamato .end() e tutti i chunk sono stati elaborati da _transform, la fine viene attivata dopo che tutti i dati sono stati emessi dopo che è stato richiamato il callback in _flush. Quindi perché viene terminato il finale dopo la fine se appartengono a cose diverse? È confuso per un novellino come ... Grazie mille, – odieatla
'finish' è associato a' tar.extract() 'che è un flusso scrivibile. Questo flusso scrivibile mantiene internamente diversi 'stream's di entrata basati sul no. di file nel tar. Quindi, quando tutti i file di voce sono scritti su disco e per loro viene emesso 'end', lo scrittore emette finalmente 'finish'. – hassansin
OK Penso che potrei ottenerlo .. Quindi 'finish' viene emesso dopo che tutti gli 'end' del flusso sono stati emessi? – odieatla