首页 > 解决方案 > 覆盖 Subject.next 方法

问题描述

我有以下代码,我想在其中覆盖next一些自定义逻辑。它不能以这种方式工作,但只有当next是具有箭头函数的属性时才有效。背后的原因是什么?

export class Store<T> extends ReplaySubject<T | undefined> {
  next(value?: T) {
    console.log("do something in my code");
    super.next(value);
  }
}
export class Store<T> extends ReplaySubject<T | undefined> {
  next = (value?: T) => {
    console.log("do something in my code");
    super.next(value);
  };
}

https://stackblitz.com/edit/typescript-override-subject-next

标签: typescriptrxjssubject

解决方案


Subject (和 Observables) 采用 Observer 对象,其方法如下next

const observer = {
  next: () => {},
  error: () => {},
  complete: () => {},
};

您可以将此对象提供给 Subject (最好是 Observable) 而不是扩展它:

const subject = new Subject();

const observer = {
  next: (val) => { ... custom logic };
  < ... > 
}

subject.asObservable().subscribe(observer);

推荐阅读