订阅后重置 Rx Js fromEvent observable

Reset Rx Js fromEvent observable after subscribe

我有 mousemove 事件:

 fromEvent(document, 'mousemove').pipe(
   filter(e => e.target !== this.formElement.nativeElement),
   filter(_ => this.form.valid),
   take(1),
   mergeMap((): any => this.confirm()),
   ).subscribe();


confirm() {
   this.snack.open('sure', 'yes').onAction()
   .subscribe(_ => {
      this.createNoteService.create();
    })
 } 

确认点心按钮后,我希望鼠标事件再次开始工作。

可能吗?谢谢!

这只对你第一次有效的原因是因为你有 take(1) 在收到一个值后结束 observable。

此外,您的 confirm() 方法应该 return 可观察;不要在函数内部订阅; mergeMap 将自动为您订阅/取消订阅。

但是,您可以使用 exhaustMap 而不是 mergeMap。这将一次只允许一个内部订阅。它将忽略任何传入的排放,直到其当前源完成:

fromEvent(document, 'mousemove').pipe(
  filter(e => e.target !== formElement.nativeElement),
  filter(_ => form.valid),
  exhaustMap(() => confirm()),
).subscribe();

function confirm() {
  return snack.open('sure', 'yes').onAction().pipe(
    tap(() => this.createNoteService.create())
  );
}