我的场景是,当收到新的TagID事件时,我必须将其显示在Angular 形式的文本框中.然后将计时器设置为5秒,如果没有收到新事件,则清除文本框.如果接收到新事件,则必须停止先前设置的定时器,并且必须调度定时器.
我的代码如下.在这种情况下,如果连续多次收到相同的TagID,则文本框将被清除,而不是重新创建计时器.
我如何使用rxjs和Angular 来实现所需的逻辑?
@Input() tagId$: Observable<string>;
const delay$ =
this.tagId$.pipe(delay(5000));
combineLatest([
this.tagId$,
delay$,
]).pipe()
.subscribe(([tag, delayedTag]) => {
let value = tag;;
if (tag === delayedTag) {
console.log('tag$$ cleared by delay', tag, delayedTag);
value = '';
}
this.tagIdFormElement?.setValue(value);
this.form.markAsDirty();
});