Ad esempio, array.map
accetta un callback che restituisce un valore.
const newArray = oldArray.map(item => doSomethingTo(item));
Le promesse accettano anche i callback che restituiscono un valore.
const requestPromise = $.ajax(...).then(res => doSomethingTo(res));
Ma il modo in cui vedo la maggior parte degli emettitori di eventi sembra che non siano funzionali in base alla progettazione.
const emitter = new EventEmitter();
// emitter.on mutates the emitter to register event
// returns nothing in most cases.
emitter.on('SOME_EVENT', event => {
// Do something entirely irrelevant to the emitter.
// Do something that mutates something outside the callback.
// Returns nothing unlike array.map and promise callbacks.
// Return value is irrelevant to the caller.
});
// Executes callbacks but return values are irrelevant.
// Returns nothing.
emitter.trigger('SOME_EVENT');
Quindi, se la mia comprensione della programmazione funzionale è corretta, i callback degli emettitori di eventi non sono puri o trasparenti, se questo è il caso.
Gli emettitori di eventi possono essere scritti in modo più funzionale? O questa è una limitazione del meccanismo? Sono eventi-driven e funzionali incompatibili? In che modo gli emettitori di eventi vengono eseguiti in altre lingue più funzionali?