Angular 为什么rxjs debounceTime不能在使用';属于';操作人员

Angular 为什么rxjs debounceTime不能在使用';属于';操作人员,angular,rxjs,rxjs6,debouncing,Angular,Rxjs,Rxjs6,Debouncing,使用angular 7和rxjs 6: <input (input)="onChange($event.target.value)"> 但这是: searchTerm$: Subject<string> = new Subject(); this.searchTerm$.pipe( debounceTime(300), ).subscribe(val => { console.log(val); }); on

使用
angular 7
rxjs 6

<input (input)="onChange($event.target.value)">
但这是:

  searchTerm$: Subject<string> = new Subject();

  this.searchTerm$.pipe(      
    debounceTime(300),    
  ).subscribe(val => {
   console.log(val);
  });


onChange(val: string) {   
  this.searchTerm$.next(val);
}
searchTerm$:Subject=新主题();
此.searchTerm$.pipe(
去BounceTime(300),
).订阅(val=>{
控制台日志(val);
});
onChange(val:string){
this.searchTerm$.next(val);
}

考虑你的逻辑。您将为每个onChanges创建一个最终的观察者。它不会去抖动,因为观测者已经完成了,去抖动是为了防止发射一个,以防另一个出现。因此,至少需要两次(或更多次)发射才是合理的,如果在回调中创建了观察者,这是不可能发生的

这不是因为()的
of
。在第一个示例中,每次调用
onChange($event.target.value)
时,您都在使用自己的
debounceTime
和自己的计时器创建一个新链。因此,它从不去抖动任何东西,因为每个输入更改都有自己的链


但是,如果您使用
Subject
(如第二个示例中所示)并通过
this.searchTerm$.next(val)
推送所有事件,那么您只有一个链,其中每个事件推送到顶部,然后按您的预期取消公告。

它是如何工作的?它没有记录任何东西还是没有去抖动?@NunoSousa,我已经编辑了这个问题,但它没有去抖动。这是正确的答案,因为它不能去抖动任何已经完成的东西!
  searchTerm$: Subject<string> = new Subject();

  this.searchTerm$.pipe(      
    debounceTime(300),    
  ).subscribe(val => {
   console.log(val);
  });


onChange(val: string) {   
  this.searchTerm$.next(val);
}