使用RxJS的Angular 6错误:无法读取未定义的属性“调用”

时间:2018-08-26 08:12:37

标签: angular typescript rxjs

我正在尝试将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';

1 个答案:

答案 0 :(得分:0)

@martin是正确的,此代码没有任何错误。

问题是从API调用返回的格式略有更改。它已经被格式化为数组,所以我只需要删除最后一行,因为不再需要mapTo:

// merge(this.clearSearch.pipe(mapTo([])))));