Meilleure façon d'importer des Observables de la rxjs
Dans mon angulaire 2 app, j'ai un service qui utilise le Observable
classe à partir de la rxjs
bibliothèque.
import { Observable } from 'rxjs';
Pour le moment je suis juste en utilisant Observable
afin que je puisse utiliser le toPromise()
fonction.
J'ai lu dans un autre StackOverflow question quelque part que l'importation de cette manière, et aussi l'importation de rxjs/Rx
va importer tout un tas de trucs inutiles à partir de la rxjs
bibliothèque qui va augmenter le temps de chargement des pages et/ou de la base de code.
Ma question est, quelle est la meilleure façon d'importer Observable
si je peux utiliser le toPromise()
fonction sans avoir à importer tout le reste?
import {Observable} from 'rxjs/Observable';
importer la Observables, mais vous n'avez pas besoin de l'importer tous, si vous êtes à l'aide de promesses...toPromise
fonctionne sans elle.- Ce que j'ai besoin d'importer par lui-même pour n'utiliser qu'
toPromise
? Je suis à l'aide Observables, j'aurais du précisé que, dans la question. c'est vraiment deux questions distinctes. - alors ce serait le faire, si vous voulez promesses
import 'rxjs/add/operator/toPromise';
Prendre un coup d'oeil à angular.io/docs/ts/latest/tutorial/toh-pt6.html Qui devrait vous aider 🙂 - Je vais le regarder. Salut et merci de prendre le temps de partager!
- Pas de problème! Amusez-vous bien! 🙂
- Ce n'est plus approprié pour rxjs 6+.
- Pouvez-vous élaborer sur la partie est incorrecte, pour les autres visiteurs de cette page.
- Veuillez voir ma réponse ci-dessous pour plus d'info.
Vous devez vous connecter pour publier un commentaire.
Rxjs v 6.*
Il s'est simplifié avec la version la plus récente de rxjs .
1) les Opérateurs
2) Autres
Au lieu d'enchaîner nous avons besoin de pipe . Par exemple
L'ancienne syntaxe :
Nouvelle Syntaxe:
Remarque: Certains opérateurs ont un changement de nom en raison de conflits de noms avec JavaScript mots réservés! Elles comprennent:
do
->tap
,catch
->catchError
switch
->switchAll
finally
->finalize
Rxjs v 5.*
Je suis en train d'écrire cette réponse, en partie pour aider à moi-même comme je l'ai garder le contrôle de docs à chaque fois que j'ai besoin d'importer un opérateur . Laissez-moi savoir si quelque chose peut être fait de mieux.
1)
import { Rx } from 'rxjs/Rx'
;Cette importations de l'ensemble de la bibliothèque. Ensuite, vous n'avez pas besoin de vous soucier de chargement de chaque opérateur . Mais vous devez ajouter Rx.
j'espère que l'arbre qui tremble permettra d'optimiser et de choisir seulement nécessaire funcionts( besoin de vérifier )Comme mentionné dans les commentaires , l'arbre qui tremble ne peut pas aider. Ce n'est donc pas optimisé façon.Ou vous pouvez importer personne opérateurs .
Cela permettra d'Optimiser votre application pour utiliser uniquement les fichiers :
2)
import { _______ } from 'rxjs/_________';
Cette syntaxe utilisée habituellement pour Objet principal comme
Rx
lui-même ouObservable
etc.,Mots-clés qui peuvent être importés avec cette syntaxe
3)
import 'rxjs/add/observable/__________';
Mise à jour Angulaire 5
Angulaire 5, qui utilise rxjs 5.5.2+
Ces sont généralement accompagnée d'Observables directement. Par exemple
D'autres mots-clés qui peuvent être importés en utilisant cette syntaxe:
4)
import 'rxjs/add/operator/_________';
Mise à jour Angulaire 5
Angulaire 5, qui utilise rxjs 5.5.2+
Ils proviennent généralement dans les cours d'eau après l'Observable est créé. Comme
flatMap
dans cet extrait de code:D'autres mots clés en utilisant cette syntaxe:
FlatMap:
flatMap
est un alias pourmergeMap
donc nous avons besoin d'importermergeMap
à utiliserflatMap
.Note pour
/add
importations :Nous avons seulement besoin d'importer une fois dans l'ensemble du projet. Donc, son conseillé de le faire à un seul endroit. Si elles sont incluses dans plusieurs fichiers, et l'un d'eux est supprimé, la compilation échouera pour les mauvaises raisons.
/add/operator
vs/operators
importations. Fonctionne comme un charme.Mise à jour pour RxJS 6 (avril 2018)
Il est désormais parfaitement bien à l'importation directement à partir
rxjs
. (Comme on peut le voir dans Angulaire 6+). Importation à partir d'rxjs/operators
est aussi très bien et il est en réalité n'est plus possible d'importer les opérateurs à l'échelle mondiale (l'une des principales raisons de refactoringrxjs 6
et de la nouvelle approche à l'aide depipe
). Grâce à cette treeshaking peut maintenant être utilisé en tant que bien.Exemple de code à partir rxjs repo:
La compatibilité descendante pour les rxjs < 6?
rxjs équipe a publié un package de compatibilité sur la ngp qui est assez bien install & play. Avec cette à toutes vos
rxjs 5.x
code devrait fonctionner sans aucun problème. Ceci est particulièrement utile lorsque la plupart des dépendances (c'est à dire les modules Angulaire) ne sont pas encore mis à jour.pipe
au lieu d'enchaîner des méthodespipe
gofore.com/en/lettable-operators-and-rxjs-versioning (il n'est pas spécialement à propos de la version 6, mais m'a aidé à comprendre pourquoi tant de changements drastiques dans RxJS6 qui ne sont pas bien expliquées dans leur propre guide)Une chose que j'ai appris à la dure est d'être cohérent
Watch out pour le mélange:
avec
Ce ne sera probablement très bien fonctionner JUSQU'à ce que vous essayez de passer de l'objet à une autre classe (où vous l'avez fait dans l'autre sens) et puis cela peut échouer
Il échoue parce que la chaîne de prototype sera différent, et il sera faux.
Je ne peux pas faire semblant de comprendre exactement ce qui se passe, mais parfois je tombe sur ce et de la nécessité de changer le format plus long.
"rxjs"
et de fusionner des définitions où il semble que vous feriez mieux de faire séparément dans le " long format.