В настоящее время я реализую конвейер с потоками для файлов CSV для записи своих строк в БД с определенной моделью.Я начал с записи всего на стандартный вывод.Это быстро привело к неожиданному поведению, когда я подключил свой собственный поток карт продукта (Transform).
Сначала я начал использовать только поток чтения fs, передал его в преобразователь csv (на основе пакета npm csv-упорядочить) и написал в process.stdout.Все текло как обычно.
Но потом я подключил свой собственный трансформатор, и он начал работать странно.Потому что, как только я применю любую операцию (JSON.parse, typeof chunk) к чанку в преобразовании, данные не будут перетекать непосредственно в стандартный вывод, а, как кажется, только после завершения чтения.
Кто-нибудь знает, почему это происходит?
Мой конвейер:
const filePath = path.join(__dirname, 'file1.csv');
//From NPM module: csv-streamify
const csvTransformer = csv({objectMode: false, columns: true});
const mapper = new CsvMapper();
const productMapStream = ProductMapStream.create(mapper);
const writeStream = ProductWriteStream.create(this.connectionPool);
fs.createReadStream(filePath)
.pipe(csvTransformer)
.pipe(csvProductMapStream)
.pipe(process.stdout)
.on('finish', () => resolve('Ok'))
Мой поток пользовательских преобразований:
export class ProductMapStream {
static create(mapper: ProductMappable) {
return new Transform({
transform(chunk: any, enc, callback) {
try {
const chunkAsString = chunk.toString('utf8');
// This already prevents continuous flowing
const newString = '' + (typeof chunkAsString);
this.push(newString);
callback(null);
} catch (e) {
callback(e);
}
}
}).once('error', console.log)
}
}
РЕДАКТИРОВАНИЕ:
После некоторых экспериментов, основанных на комментариях @PatrickDillon, я обнаружил, что эта проблема возникает только тогда, когда она запускается внутри контейнера Docker.Я пробовал разные версии узлов на основе изображений узлов Docker.Я начал с узла: 8.12.0-alpine, и я также попробовал узел: 10.11.0-jessie, но, к сожалению, без различий в поведении.Кто-нибудь знает о специальном поведении при использовании Docker с fs или потоками или чем-то, что может показаться связанным?