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
})
);