首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mostjs从自定义源创建流

mostjs从自定义源创建流
EN

Stack Overflow用户
提问于 2016-12-07 17:29:17
回答 2查看 531关注 0票数 1

我对当前从可能不符合现有流创建方法(https://github.com/cujojs/most/blob/master/docs/api.md)的源创建流的最佳实践感到好奇。

使用Firebase的ref.on('child_added', function(snap){})的示例

代码语言:javascript
复制
most.fromEvent('child_added', ref) //ERROR

我不能用.fromEvent..。尽管ref实现了某种on,但它似乎不符合EventEmitter接口(addEventListener,removeEventListener)。

代码语言:javascript
复制
ref.on('child_added', function(snap){ emitter.emit('value', snap) })

most.fromEvent('value', emitter)

手动发射事件,是我目前所能想到的最好的.

代码语言:javascript
复制
// 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) })
})

是否有类似的机制来自定义创建流( la Rx )?

还有更好的方法让我错过吗?

EN

回答 2

Stack Overflow用户

发布于 2016-12-07 19:08:24

检查如何使用@most/create

https://github.com/mostjs/create

它允许手动发出事件-类似于您使用rxJS所做的事情。

票数 1
EN

Stack Overflow用户

发布于 2016-12-07 20:36:51

另一种选择可能是对防火墙库公开的接口进行调整,以适应most的fromEvent构造函数。

查看fromEvent的源代码,我们可以看到它支持事件源的两个接口:

有了这些知识,我们就可以实现一个shim函数,从{ on, off }接口创建一个流:

代码语言:javascript
复制
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在事件循环的下一个滴答上执行事件调度,并在流结束时处理事件侦听器的处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41023748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档