2016-12-07 1 views
1

Я любопытный о текущей наилучшей практике для создания потоков из источников, которые, возможно, не соответствуют способу существующего создания потока (https://github.com/cujojs/most/blob/master/docs/api.md)mostjs - создание потоков из пользовательских источников

Примера использования Firebase-х ref.on('child_added', function(snap){}):

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

Я не могу использовать .fromEvent ... хотя ref реализует своего рода on, он, похоже, не соответствует интерфейсу EventEmitter (addEventListener, removeEventListener)


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

most.fromEvent('value', emitter) 

вручную излучающие события, лучшее, что я могу думать на данный момент ...


// 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) }) 
}) 

Есть ли подобный механизм пользовательский создать поток, a la Rx?

Есть ли лучшие способы, которыми я не хватает?

ответ

1

Проверьте, как использовать @most/create

https://github.com/mostjs/create

Это позволяет вручную испускает событие - подобно тому, как вы могли бы сделать это с rxJS

1

Другим вариантом может быть Призонной шайбу интерфейса, который ваш firebase библиотека предоставляет для размещения большинства конструктор fromEvent.

Глядя на исходный код для fromEvent, мы можем видеть, что он поддерживает два интерфейса для источников событий:

С этими знаниями мы можем реализовать функцию прокладки для создания потока из { on, off } интерфейс:

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) 
    } 
} 

Это может быть лучше, чем при использовании create, поскольку the EventEmitterSource выполняет планирование события на следующем такте цикла событий, и обрабатывает утилизацию слушателя событий, когда поток завершается.

 Смежные вопросы

  • Нет связанных вопросов^_^