我正在尝试将Angular 5应用程序迁移到Angular 6,但我有一段RxJS代码把我难住了。我已经在谷歌上搜索和阅读了足够多的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';
发布于 2018-08-27 01:58:44
@martin是正确的,这段代码没有任何错误。
问题是从API调用返回的格式稍有变化。它已经被格式化为数组,所以我只需要删除最后一行,因为不再需要mapTo:
// merge(this.clearSearch.pipe(mapTo([])))));
https://stackoverflow.com/questions/52024413
复制相似问题