我是RxJ的新手,我有一个可以观察的对象:其他代码需要能够侦听此对象可以发出的几个自定义事件。因此,例如,如果我有这个:
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!'));
我不知道在这种用例中使用RxJ有意义还是自己实现一个可观察对象(就像我在使用RxJ之前所做的那样)。我试图将
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/