重置订阅后可观察到的事件中的Rx Js



我有鼠标移动事件:

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),它在收到一个值后结束可观察。

此外,您的confirm()方法应该返回observable;不要在函数内部订阅;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())
);
} 

最新更新