65 votes

rxjs flatmap manquant

J'essaie de la chaîne de multiples rx.js observables et transmettre les données. Flatmap devrait être du côté de l'opérateur, mais avec une importation de

import { Observable } from 'rxjs/Observable';

il n'est pas trouvé:

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

Version 5.0.0-beta.6 de rx.js est utilisée.

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

113voto

Georg Heiler Points 4721

Il s'avère que la réponse est assez simple:

l'opérateur est appelé mergeMap dans cette version de rxjs

EDIT:

En outre, vous pouvez utiliser import 'rxjs/add/operator/mergeMap'.

71voto

Chris Peacock Points 1361

Dans mon cas, j'ai besoin d'importer de l'augmentation de mergeMap:

import 'rxjs/add/operator/mergeMap';

Comme flatMap est un alias de mergeMap, importer le module ci-dessus vous permettra d'utiliser les flatMap.

28voto

Trent Points 2071

Avec RxJS 5.5+, flatMap de l'opérateur a été renommé mergeMap. Au lieu de cela, vous devez désormais utiliser l' mergeMap opérateur en conjonction avec d' pipe.

Vous pouvez toujours utiliser flatMap à l'aide de l'alias FlatMap.

RxJS v5.5.2 est la valeur par défaut de la dépendance version Angulaire 5.

Pour chaque RxJS Opérateur de l'importation, y compris l' mergeMap, vous devriez maintenant importer à partir d' 'rxjs/opérateurs et d'utiliser le tuyau de l'opérateur.

Exemple d'utilisation de mergeMap sur une requête Http Observables

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(' '))
    );
  }
  ...
}

Remarquons ici que, flatMap est remplacé par mergeMap et de la pipe opérateur est utilisé pour composer les opérateurs de manière similaire à ce que vous êtes habitué avec le point-le chaînage.


Voir la rxjs documentation sur locative opérateurs pour plus d'info https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md

8voto

rafalkasa Points 468

Corriger l'importation devrait ressembler à ci-dessous:

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

L'importation du module mergeMap va vous permettre d'utiliser flatMap dans votre code

Lorsque vous importez dans votre code import { Observable } from 'rxjs/Rx';, supplémentaires mergeMap d'importation n'est pas nécessaire mais vous pouvez vous attendre à des erreurs lors de la AoT compilation.

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

-2voto

Karfann Nacif Points 23

Il a travaillé pour moi!

import { Observable } from 'rxjs/Rx';

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X