javascript - 从一个对象订阅多个事件的 RxJ 最佳实践

标签 javascript rxjs

我是 RxJs 新手,我有一个应该是可观察的对象:其他代码需要能够监听该对象可以发出的多个自定义事件。例如,如果我有这个:

class MyObject {

  constructor() {
    this.arr = [];
  }

  addOne(value) {
    this.arr.push(value);
    // fire event ITEM_ADDED
  }

  removeLast() {
    this.arr.splice(-1, 1);
    // fire event ITEM_REMOVED
  }
}

我希望其他代码执行类似的操作:

const myObj = new MyObject();
myObj.on('ITEM_ADDED', () => console.log('item added!'));
myObj.on('ITEM_REMOVED', () => console.log('item removed!'));

我不知道在这个用例中使用 RxJs 是否有意义,或者自己实现一个可观察对象(就像我在使用 RxJs 之前所做的那样)。我试图让 MyObject 扩展 Observable 但我没有找到触发事件的方法。

最佳答案

一种方法是使用主题,例如。

class MyObject {
    eventStream = new Rx.Subject();
    constructor() {
        this.arr = [];
    }

    addOne(value) {
        this.arr.push(value);
        this.eventStream.next('ITEM_ADDED')
    }

    removeLast() {
        this.arr.splice(-1, 1);
        this.eventStream.next('ITEM_REMOVED')
    }
}

myObject.eventStream
.filter(event => event === 'ITEM_ADDED')
.subscribe(() => console.log('Item added'))

myObject.eventStream
.filter(event => event === 'ITEM_REMOVED')
.subscribe(() => console.log('Item removed'))

关于javascript - 从一个对象订阅多个事件的 RxJ 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44443510/

相关文章:

javascript - 导航栏在移动设备上折叠,滚动时使用 chrome/safari

angular - 针对 RESTful api 的 RxJS Observables

angular - 如何使用 RxJS 跳过可观察值的第一个值?

Angular - 如何正确使用 Services、HttpClient 和 Observables 在我的应用程序中传递对象数组

javascript - 这真的是从事件回调中获取 Rx.Observable 的最佳方式吗?

javascript - 修改与 Angular 异步管道 react 方式一起使用的流中的数据

javascript - HTML 表获取选中的复选框和文本元素

javascript - 使用 matchmedia.js 在断点上删除/添加 css 类

javascript - react 前置项目列表

javascript - knockout if 和文本绑定(bind)