手动创建可观察的

时间:2016-12-15 19:39:56

标签: javascript rxjs

我正在使用我的前端开发OpenUI5并且它不支持rxjs。

例如,我想听OpenUI5事件中的按钮按钮,但不能像

那样
var source = Rx.Observable.fromEvent(input, 'press');

var subscription = source.subscribe(
  function (x) {
    console.log('Next: Clicked!');
  },
  function (err) {
    console.log('Error: %s', err);
  },
  function () {
    console.log('Completed');
  });

因为Button控件没有实现事件侦听器。

所以我必须自己创建Observable,如何创建一个热的Observable?

1 个答案:

答案 0 :(得分:0)

如果fromEvent不适合您,或者您想要将多个事件连接到同一个流,则可以执行以下操作:

function mouseAllTheThingsStream(){
  const target = document.getElementById('#content');
  return Rx.Observable.create(observer => {
    target.onmousemove(evt => observer.onNext(evt));
    target.onmousedown(evt => observer.onNext(evt));

    window.setTimeout(() => observer.onCompleted(), 30 * 1000);

    return () => {
      // cleanup; unsubscribe from events manually
    }
  });
}