2016-12-07 2 views
1

Je suis curieux de savoir les meilleures pratiques actuelles pour créer des flux de sources qui peuvent ne pas être conformes à une méthode de création de flux existant (https://github.com/cujojs/most/blob/master/docs/api.md)mostjs - créer des flux provenant de sources personnalisées

Exemple d'utilisation ref.on('child_added', function(snap){}) de Firebase:

most.fromEvent('child_added', ref) //ERROR 

Je ne peux pas utiliser .fromEvent ... bien que ref implémente une sorte de on, il ne semble pas conforme à l'interface EventEmitter (addEventListener, removeEventListener)


ref.on('child_added', function(snap){ emitter.emit('value', snap) }) 

most.fromEvent('value', emitter) 

émettant manuellement des événements, est le meilleur que je peux penser au moment ...


// https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/create.md 

Rx.Observable.create(function(observer){ 
    ref.on('child_added', function(snap){ observer.next(snap) }) 
}) 

est-il un mécanisme similaire à personnalisé créer un flux, un Rx?

Y a-t-il de meilleurs moyens qui me manquent?

Répondre

1

Une autre option pourrait consister à calez l'interface que votre firebase library expose pour convenir au constructeur le plus fromEvent.

En regardant le code source pour fromEvent, nous pouvons voir qu'il prend en charge deux interfaces pour les sources d'événements:

Avec cette connaissance, nous pouvons implémenter une fonction shim pour créer un flux à partir du { on, off } Interface:

function fromEvent (eventName, source) { 
    if (typeof source.on === 'function' && typeof source.off === 'function') { 
    return most.fromEvent(eventName, { 
     addListener: source.on, 
     removeListener: source.off 
    }); 
    } else { 
    return most.fromEvent.apply(null, arguments) 
    } 
} 

Cela peut être plus agréable que d'utiliser create, comme the EventEmitterSource effectue la programmation de l'événement sur la prochaine itération de la boucle d'événements, et les poignées de l'élimination de l'écouteur d'événement lorsque les extrémités flux.