Фон
Я создаю приложение, которое получает сообщения от нескольких устройств. При получении сообщения происходит событие с указанным сообщением:
on( "data", message => {
//doSomething
} );
Вызов
Эта функция принимает два типа сообщений: A и B:
- сообщение A имеет идентификатор устройства
- сообщение B содержит информацию о поступлении
Мой первый подход к этому был следующий:
const { ifElse } = require("ramda");
const evalData = ifElse(
isTypeA, // Returns true if type A, false otherwise
evalTypeA, // Returns device Id
evalTypeB // Processes data in message and returns bytes read
);
on( "data", evalData );
Задача
Проблема здесь в том, что сообщения типа B не имеют идентификатора устройства, которому они принадлежат. Поэтому для правильной обработки сообщения мне нужен идентификатор устройства, который evalTypeA
вернул в предыдущем сообщении.
Моя идея для решения этой проблемы состояла в том, чтобы передать Id evalTypeB
:
const evalData = messages => {
let id = undefined;
id = ifElse(
isTypeA, // Returns true if type A, false otherwise
evalTypeA, // Returns device Id
evalTypeB( id ) // Processes data in message and returns bytes read
)( message );
}
Проблема в том, что это не сработает! evalTypeB
также возвращает число, и тогда я бы понятия не имел, если мне дано выражение ifElse
, это число прочитанных байтов или Id!
Вопрос
Как бы вы решили это без мутаций и побочных эффектов?