【问题标题】:CombineLatest Infinite Loop pluck operatorCombineLatest 无限循环采摘算子
【发布时间】:2020-09-25 22:57:13
【问题描述】:

注意:我在具有 ngFor 的组件中调用 set 函数。因此,当我调用 set 函数时,ngOnInit 会多次执行,因此 set 函数也会多次执行。 我有一个可观察的对象,我更新它以保持数据一致。

private app= this.subject.asObservable().distinctUntilChanged();

我使用这种方法访问数据

select<T>(name: string): Observable<T> {
   return this.app.pluck(name);
}

当我在每个用户选择上更新这个“应用程序”时,我会进入一个无限循环。所以 $info 开始一遍又一遍地打印相同的信息。并且“集合”被一遍又一遍地调用。 我正在使用异步管道在 html 视图中订阅和取消订阅。有什么想法吗?

updateFruits(fruit) {
  this.app.set('Fruits', fruit);
}

set(name: string, state: any) {
  this.subject.next({ ...this.value, [name]: state });
}

   this.info$ = combineLatest(fruits$)
  .pipe(
      distinctUntilChanged(),
      debounceTime(0)
      map(fruits => fruits)
   );

【问题讨论】:

    标签: angular rxjs combinelatest


    【解决方案1】:

    我认为要使用pluckdistinctUntilChanged 之类的运算符,您必须使用pipe

    private app = this.subject.asObservable().pipe(distinctUntilChanged());
    
    select<T>(name: string): Observable<T> {
       return this.app.pipe(pluck(name));
    }
    

    我也从未见过set 用于可观察对象的方法,只有next

    -- 编辑

    我明白了,我原以为 this.app 是可观察的。

    我试图重现该错误,但一切似乎都很好: 希望对您有所帮助:https://stackblitz.com/edit/rxjs-stack

    【讨论】:

    • "set" 指的是我定义的这个方法,在这里我更新了值 set(name: string, state: any) { this.subject.next({ ...this.value, [name ]: 状态 }); }
    • 谢谢!可能是因为我尝试“设置”值的组件使用 ngFor 来显示信息?我看到调用 set 函数后 ngOnInit 一遍又一遍地运行:o
    猜你喜欢
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多