Ваша функция on
имеет тип
(t, [ | `_end(unit => unit) | `data(Buffer.t => unit)]) => unit
таким образом, если вы хотите установить канал связи между двумя вызовами на on
, единственный выбор, который у вас есть, - это использовать некоторые побочные вычисления, то есть изменяемый эталон , канал ввода / вывода, и т.д.
Если вы хотите придерживаться более функционального стиля программирования, вам следует рассмотреть возможность изменения типа возвращаемого значения ваших обработчиков на какой-то обитаемый тип, например, (t, ...) => result
Обычно такой стиль предполагает использование Promises , т. Е. Когда возвращаемое значение обработчика является обещанием. Это обеспечивает стиль программирования, при котором обработчики асинхронных событий могут безопасно взаимодействовать друг с другом без явной изменчивости.