Gli emettitori di eventi possono essere funzionali?

6

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?

    
posta Joseph 22.09.2016 - 04:03
fonte

1 risposta

1

Nel mondo di Redux (che l'ha preso dal mondo della programmazione funzionale), funziona in questo modo:

function reducer(state, action) {
   // action is the "event"
   switch (action.type) {
       case 'SOME_EVENT':
           return {...state, value: 'modified'}
       default:
           return state;
   }
}

Ciò consente alla gestione degli eventi di essere pura. Tutte le tue funzioni richiedono lo stato corrente e l'evento e restituiscono un nuovo evento.

    
risposta data 22.09.2016 - 05:13
fonte

Leggi altre domande sui tag