订阅前运行功能

时间:2019-11-03 00:23:46

标签: javascript angular typescript rxjs

我想在用户选择一个选项后立即添加一个表单控件。

我的选择功能:

selected(event: MatAutocompleteSelectedEvent): void {
      this.setTechnologies = new Set();
      this.setTechnologies.add(this.techInput.nativeElement.value);
}

添加新控制器

this.primaryFormGroup.addControl('tech', new FormControl('', []));
this.primaryFormGroup.valueChanges.subscribe(inputFields => {
  if (inputFields) {
    inputFields.tech = Array.from(this.setTechnologies);
  }
}

我的问题是,在功能inputFields.tech = Array.from(this.setTechnologies);之前的之前,将执行行selected()。因此,在这种情况下,inputFields.tech的值始终为空。

如何首先运行该功能?

1 个答案:

答案 0 :(得分:2)

一种方法是在valueChanges上添加一个delay。这样可以确保selected()函数在valueChanges之前运行。

this.primaryFormGroup.valueChanges.pipe(
  delay(500)
).subscribe(inputFields => {
  if (inputFields) {
    inputFields.tech = Array.from(this.setTechnologies);
  }
}