1

既存のストリーム作成方法 ( https://github.com/cujojs/most/blob/master/docs/api.md )に準拠していないソースからストリームを作成するための現在のベスト プラクティスに興味があります。

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

Rx のようにカスタム ストリームを作成する同様のメカニズムはありますか?

私が見逃しているより良い方法はありますか?

4

2 に答える 2

1

fromEvent別のオプションは、ほとんどのコンストラクターに適合するように、firebase ライブラリが公開するインターフェイスをシムすることです。

のソース コードをfromEvent見ると、イベント ソースに対して 2 つのインターフェイスがサポートされていることがわかります。

その知識があれば、シム関数を実装して{ 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)
  }
}

これはcreateEventEmitterSourceがイベント ループの次のティックでイベントのスケジューリングを実行し、ストリームの終了時にイベント リスナーの破棄を処理するため、 を使用するよりも便利です。

于 2016-12-07T20:36:51.177 に答える
1

使い方をチェック@most/create

https://github.com/mostjs/create

手動でイベントを発行することができます - あなたがそれを行う方法と同様ですrxJS

于 2016-12-07T19:08:24.113 に答える