typescript - Angular 6 Error al usar RxJS: No se puede leer la propiedad 'call' de indefinido
Estoy intentando migrar una aplicación de Angular 5 a Angular 6 y tengo este bloque de código de RxJS que me tiene desconcertado. He buscado en Google y leído los documentos de RxJS lo suficiente como para saber que debería estar usando .pipe, pero no logro entender del todo la sintaxis.
El código devuelve resultados de una llamada a la API mientras el usuario escribe en un campo de búsqueda. La nueva versión actualmente genera el error:
ERROR TypeError: Cannot read property 'call' of undefined
at merge.js:8
at MapSubscriber.project (switchMap.js:9)
Código original:
this.searchResults =
this.form.controls['search'].valueChanges
.debounceTime(200)
.switchMap(query => this.search.searchPeople(query))
.merge(this.clearSearch.mapTo([]));
Nueva versión:
this.searchResults = this.form.controls['search'].valueChanges.pipe(
debounceTime(200),
switchMap(query => this.search.searchPeople(String(query)),
merge(this.clearSearch.pipe(mapTo([])))));
He importado RxJS así:
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';
Respuesta #1
@martin tenía razón, no había nada mal con este código.
El problema era que el formato devuelto por la llamada a la API había cambiado ligeramente. Ya estaba formateado como un arreglo, así que solo tuve que eliminar la última línea ya que mapTo ya no era necesario:
// merge(this.clearSearch.pipe(mapTo([])))));
