首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重写Subject.next方法

重写Subject.next方法
EN

Stack Overflow用户
提问于 2021-02-13 14:37:52
回答 2查看 209关注 0票数 2

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

代码语言:javascript
复制
export class Store<T> extends ReplaySubject<T | undefined> {
  next(value?: T) {
    console.log("do something in my code");
    super.next(value);
  }
}
代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-13 14:55:47

Subject (和可观察对象)使用像next这样的方法获取观察者对象

代码语言:javascript
复制
const observer = {
  next: () => {},
  error: () => {},
  complete: () => {},
};

您可以将此对象提供给主题(最好是可观察的),而不是扩展它:

代码语言:javascript
复制
const subject = new Subject();

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

subject.asObservable().subscribe(observer);
票数 0
EN

Stack Overflow用户

发布于 2021-10-24 12:53:53

今天,我还扩展了ReplaySubject来获得最后一个值。为此,我提出了一个PR- https://github.com/ReactiveX/rxjs/pull/6652/files,但为了在我的项目中解决这个问题,同时,我扩展了ReplaySubject,同样的事情也发生在我身上;next没有被覆盖。

我把自己逼疯了为什么会发生这样的事情。我跳到源代码中,看到在RxJS 6.x版本中,next方法id被函数赋值- https://github.com/ReactiveX/rxjs/blob/6.6.7/src/internal/ReplaySubject.ts#L31所覆盖,这就是它没有被覆盖的原因。

跟踪同一文件的历史,我发现在这个commit- https://github.com/ReactiveX/rxjs/commit/f1dcada1e1838ffb01cd0dac60340c6fa068f3cf#diff-a287f66fc20bf26caa2f42935756aa6a094f400e91d6b4a388aee4e4e11675c4中,这个行为在v7.x (具体来说是7.0.0-beta.6)中发生了变化。

因此您必须升级到RxJS 7.x版本才能使其正常工作。

如果您无法升级到7.x版本-以下是解决方法-

代码语言:javascript
复制
export class Store<T> extends ReplaySubject<T | undefined> {

  private originalNext: any;

  constructor(bufferSize: number, windowTime: number) {
    super(bufferSize, windowTime);
    this.originalNext = super.next;
    this.next = this.emit;
  }

  private emit(value?: T): void {
    console.log("do something in my code");
    super.next(value);
  };
}

干杯!

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

https://stackoverflow.com/questions/66182459

复制
相关文章

相似问题

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