Я знаком с потоками узлов, но я борюсь за лучшие методы абстрагирования кода, которые я многократно использую в одном шаге.Узел - этапы этапов абстрагирования в функции
Вот усеченную версию о том, что я пишу сегодня:
inputStream
.pipe(csv.parse({columns:true})
.pipe(csv.transform(function(row) {return transform(row); }))
.pipe(csv.stringify({header: true})
.pipe(outputStream);
Реальная работа происходит в transform()
. Единственные вещи, которые действительно меняются: inputStream
, transform()
и outputStream
. Как я уже сказал, это урезанная версия того, что я на самом деле использую. У меня много обработки ошибок и регистрации на каждом этапе шага, что в конечном итоге, почему я пытаюсь абстрагироваться от кода.
Что я ищу, чтобы написать это один шаг трубы, например, так:
inputStream
.pipe(csvFunction(transform(row)))
.pipe(outputStream);
То, что я изо всех сил, чтобы понять, как превратить эти шаги труб в одну функцию, которая принимает поток и возвращает поток. Я смотрел на библиотеки, как через2, но я не уверен, как это получается, когда я пытаюсь идти.
Как передать ссылку преобразования (строки) в поток? Разве мне не лучше использовать поток трансформации? Я читал, что PassThrough больше предназначен для мониторинга потока, чем на самом деле работает над ним? – AdamPat
Зависит от того, как вы упаковываете обработку потока. Просто поставьте функцию в том месте, где она видна, или передайте ее в качестве ссылки. И, конечно, вы можете реализовать свое решение в потоке преобразования (посмотрите здесь https://nodejs.org/api/stream.html#stream_implementing_a_transform_stream). Показ идеи с потоком PassThrough был самым простым способом, который я нашел. – Marc