我正在尝试将Angular 5应用程序迁移到Angular 6,但我却遇到了这一块RxJS代码。我已经Google搜索并阅读了RxJS文档,足以知道我应该使用.pipe,但是我不太了解语法。
当用户在搜索输入字段中键入内容时,代码将返回API调用的结果。新版本当前引发错误:
ERROR TypeError: Cannot read property 'call' of undefined
at merge.js:8
at MapSubscriber.project (switchMap.js:9)
原始代码:
this.searchResults =
this.form.controls['search'].valueChanges
.debounceTime(200)
.switchMap(query => this.search.searchPeople(query))
.merge(this.clearSearch.mapTo([]));
新版本:
this.searchResults = this.form.controls['search'].valueChanges.pipe(
debounceTime(200),
switchMap(query => this.search.searchPeople(String(query)),
merge(this.clearSearch.pipe(mapTo([])))));
我已经这样导入RxJS:
import { Observable } from 'rxjs';
import { Subject } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
import { mapTo } from 'rxjs/operators';
import { merge } from 'rxjs/operators';
import { switchMap } from 'rxjs/operators';
答案 0 :(得分:0)
@martin是正确的,此代码没有任何错误。
问题是从API调用返回的格式略有更改。它已经被格式化为数组,所以我只需要删除最后一行,因为不再需要mapTo:
// merge(this.clearSearch.pipe(mapTo([])))));