我正在实现 concatMap 运算符。甚至在此之前,我尝试一个接一个地进行两个订阅,并且成功了。第一次订阅是针对表单的输入字段进行的,第二次订阅是针对 http 请求的。下面是代码:
// AfterViewInit implementation
// this.form is a formGroup with formControl city
ngAfterViewInit() {
this.form.valueChanges.pipe(
map (val=>val.city),
).subscribe(
val => {this.request(val)}
);
}
request(city){
this.httpClient.get(url, {params:{
...
}}).subscribe(
value => {
}, error => {}
);
}
每次更新输入字段时,上面的代码片段都会进行 http 调用。我通过添加 concatMap 对 ngAfterViewInit 进行了如下修改:
ngAfterViewInit() {
this.form.valueChanges.pipe(
concatMap(val=> this.request(val.city)),
).subscribe();
}
现在,请求没有按预期发出。当输入改变时,第一次请求只进行一次。永远不会为更新的输入字段发出第二个请求。我在这里做错了什么?