2015-01-28 19 views
9

Ich benutze reagieren mit Flux-Architektur.
Ich habe auf dem Netz lesen, um Store zu definieren, ich habe so etwas zu tun:EventEmitter vs Facebook Dispatcher

var AppDispatcher = require('../dispatcher/dispatcher'), //facebook's dispatcher 
    EventEmitter = require('events').EventEmitter, 
    assign = require('object-assign'); 

var MyStore = assign({}, EventEmitter.prototype, { 
    ..... 

Soweit ich verstehe, EventEmitter und Facebook-Dispatcher viel gemeinsam haben. Zum Beispiel können beide ein Ereignis aussenden (oder versenden).
Meine Frage ist, warum brauche ich sowohl EventEmitter und Dispatcher? Ist das nicht überflüssig? Ist es nicht besser, einen Dispatcher zu erstellen, der auch das von EventEmitter benötigte Verhalten enthält?

+0

Genau was ich auch dachte! – Michelle

+0

@PineappleUntheDeSea: Sind Sie zu einem Ergebnis gekommen? :) – Naor

Antwort

4

Der Dispatcher verfügt über Funktionen, die in EventEmitter nicht bereitgestellt oder erwartet werden. Das wichtigste Merkmal ist waitFor, mit dem ein Geschäft sicherstellen kann, dass ein anderes Geschäft als Reaktion auf eine Aktion aktualisiert wurde, bevor es fortgesetzt wird.

Pattern-weise ist der Dispatcher auch ein Singleton, wohingegen EventEmitter eine API ist, der Sie möglicherweise Objekte in mehreren Speichern zuweisen können.

Natürlich könnten Sie Ihre eigene Hybridklasse erstellen, um beide Zwecke zu erfüllen. Der Facebook Flux Dispatcher ist eine Referenzimplementierung :)