mergemap learnrxjs rxjs observable reactive-extensions-js

learnrxjs - rxjs import mergemap



Falta el plano plano de rxjs (6)

¡Funcionó para mí!

import { Observable } from ''rxjs/Rx'';

Intento encadenar múltiples observables rx.js y pasar los datos. Flatmap debe ser el operador de ajuste pero con una importación de

import { Observable } from ''rxjs/Observable'';

no se encuentra:

Error TS2339: Property ''flatmap'' does not exist on type ''Observable<Coordinates>''

Se utiliza la versión 5.0.0-beta.6 de rx.js.

public getCurrentLocationAddress():Observable<String> { return Observable.fromPromise(Geolocation.getCurrentPosition()) .map(location => location.coords) .flatmap(coordinates => { console.log(coordinates); return this.http.request(this.geoCodingServer + "/json?latlng=" + coordinates.latitude + "," + coordinates.longitude) .map((res: Response) => { let data = res.json(); return data.results[0].formatted_address; }); }); }


Con RxJS 5.5+, el operador flatMap ha cambiado de nombre a mergeMap . En su lugar, ahora debe usar el operador mergeMap junto con la pipe .

Todavía puede usar flatMap con el alias FlatMap .

RxJS v5.5.2 es la versión de dependencia predeterminada para Angular 5.

Para cada operador RxJS que importe, incluido mergeMap , ahora debe importar desde ''rxjs / operadores'' y usar el operador de tubería.

Ejemplo de uso de mergeMap en una solicitud Http Observable

import { Observable } from ''rxjs/Observable''; import { catchError } from ''rxjs/operators''; ... export class ExampleClass { constructor(private http: HttpClient) { this.http.get(''/api/words'').pipe( mergeMap(word => Observable.of(word.join('' '')) ); } ... }

Observe aquí que flatMap se reemplaza por mergeMap y el operador de pipe se usa para componer los operadores de manera similar a lo que está acostumbrado con el encadenamiento de puntos.

Consulte la documentación de rxjs sobre operadores alquilables para obtener más información https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md


En mi caso, necesitaba importar el aumento para mergeMap:

import ''rxjs/add/operator/mergeMap'';

Como flatMap es un alias de mergeMap, la importación del módulo anterior le permitirá usar flatMap.


La importación correcta debería verse a continuación:

import { Observable } from ''rxjs/Observable''; import ''rxjs/add/operator/mergeMap'';

Importar el módulo mergeMap le permitirá usar flatMap en su código

Cuándo importará en su código import { Observable } from ''rxjs/Rx''; , no se necesita importar mergeMap adicional, pero puede esperar errores durante la compilación de AoT.

ERROR in ./node_modules/rxjs/_esm5/observable/BoundCallbackObservable.js Module build failed: TypeError: Cannot read property ''type'' of undefined


Resulta que la respuesta es bastante simple:

el operador se llama mergeMap en esta versión de rxjs

EDITAR:

Además, es posible que import ''rxjs/add/operator/mergeMap'' usar la import ''rxjs/add/operator/mergeMap'' .


Actualización rápida - mayo de 2019

Usando rxjs v6.5.1

Importar como un operador mergeMap , por ejemplo /

import { Observable, from, of } from "rxjs"; import { map, filter, mergeMap } from "rxjs/operators";

Luego, úselo junto con la nueva función de pipe , por ejemplo /

var requestStream = of("https://api.github.com/users"); var responseStream = requestStream.pipe( mergeMap(requestUrl => { console.log(requestUrl); ... // other logic return rp(options); // returns promise }) );