Angular 如何在OnDestroy中完成活动去BounceTime

Angular 如何在OnDestroy中完成活动去BounceTime,angular,rxjs,Angular,Rxjs,当用户更改输入字段时,我当前正在保存值。我不想每次输入一个新字符时都保存该值,所以我使用rxjs debounceTime在3000毫秒(只是一个示例)后保存,不做任何更改 this.subscription.add(this.form.controls.inputControl.valueChanges .pipe(debounceTime(3000)) .subscribe(value => { // execute HTTP c

当用户更改输入字段时,我当前正在保存值。我不想每次输入一个新字符时都保存该值,所以我使用rxjs debounceTime在3000毫秒(只是一个示例)后保存,不做任何更改

this.subscription.add(this.form.controls.inputControl.valueChanges
        .pipe(debounceTime(3000))
        .subscribe(value => {
            // execute HTTP call with value
        }));

ngOnDestroy(): void {
    this.subscription.unsubscribe();
}
如果用户更改了该值,并且在达到3000ms计时器之前调用了OnDestroy,则不会再执行该调用。我想知道是否有一种方法可以取消活动计时器,并在销毁组件之前执行所有剩余的观察值

编辑:另一个选项是,当存在未保存的更改时,用户会收到警告。就像google calendar在添加新任务并离开页面时所做的那样

const destromed=new Subject();
const isTimerActive=新行为主体(false);
const stop$=CombineTest(已销毁,正在运行)
.烟斗(
过滤器(([isDestroyed,isTimerActive])=>isDestroyed&!isTimerActive)
);
src$管道(
去盎司(
() => (
//现在,如果该组件被销毁,它将不会从该流中取消订阅
isTimerActive.next(正确),
计时器(/*…*/)
)
),
switchMap(v=>makeRequest(v)),
//如果组件已销毁,则在发送此
//该流将被取消订阅
轻触(()=>isTimerActive.next(false)),
takeUntil(stop$)
).订阅(/*…*/)
Ngondestory(){
这个。销毁。下一个(正确);
这个。销毁。完成();
}
需要注意的是,只有当我们完成了所有涉及延迟后发出的值的任务时,计时器才会被声明为非活动(
isTimerActive.next(false)


这是因为如果
destromind
true
并且我们立即执行
isTimerActive。下一步(false)
,取消订阅将同步发生,这意味着您将无法使用该值执行任何其他操作。

非常好的解决方案。我仍然在争论使用这个或停用防护,并警告用户在离开页面时也会收到警告。但是谢谢你的回答!