Búsqueda de sitios web

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([])))));