RxJS flatmap manquant

j'essaie d'enchaîner plusieurs rx.js observables et transmettre les données. Flatmap devrait être l'opérateur d'ajustement mais avec un import 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é.

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;
              });
      });
  }
44
demandé sur Georg Heiler 2016-07-20 15:46:48

5 réponses

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

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

EDIT:

import 'rxjs/add/operator/mergeMap'.

91
répondu Georg Heiler 2018-09-13 10:40:29

dans mon cas, j'ai dû importer l'augmentation pour mergeMap:

import 'rxjs/add/operator/mergeMap';

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

61
répondu Chris Peacock 2017-11-06 13:20:10

avec rxjs 5.5+, le flatMap opérateur a été renommé mergeMap. Au lieu de cela, vous devriez maintenant utiliser le mergeMap opérateur en conjonction avec pipe.

vous pouvez toujours utiliser flatMap en utilisant l'alias FlatMap.

RxJS v5.5.2 est la version de dépendance par défaut pour Angular 5.

pour chaque opérateur RxJS que vous importez, y compris mergeMap, vous devez maintenant importer à partir de 'RxJS / operators' et utiliser le tuyau opérateur.

exemple d'utilisation de mergeMap sur une requête 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(' '))
    );
  }
  ...
}

flatMap est remplacé par mergeMap et pipe l'opérateur est utilisé pour composer les opérateurs de la même manière que ce à quoi vous êtes habitué avec le chaînage de points.


voir la documentation de rxjs sur les opérateurs lettables pour plus info https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md

9
répondu Trent 2017-12-16 02:20:07

importation Correct devrait ressembler à ceci:

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

Importer le module mergeMap vous permettra d'utiliser flatMap dans votre code

quand vous importerez dans votre code import { Observable } from 'rxjs/Rx'; supplémentaire mergeMap l'importation n'est pas nécessaire mais vous pouvez vous attendre à des erreurs lors de la compilation AoT.

ERROR in ./node_modules/rxjs/_esm5/observable/BoundCallbackObservable.js
Module build failed: TypeError: Cannot read property 'type' of undefined
6
répondu rafalkasa 2017-11-22 17:23:29

Il a travaillé pour moi!

import { Observable } from 'rxjs/Rx';
-2
répondu Karfann Nacif 2018-09-19 06:59:46