J'essaie d'enrouler ma tête autour d'observables. J'aime la façon dont les observables résolvent les problèmes de développement et de lisibilité. Comme je l'ai lu, les avantages sont immenses.
Les observables sur HTTP et les collections semblent être simples. Comment puis-je convertir quelque chose comme ça en motif observable.
Il s'agit de mon composant de service, pour fournir l'authentification. Je préférerais que cela fonctionne comme les autres services HTTP dans Angular2 - avec prise en charge des gestionnaires de données, d'erreurs et de complétion.
firebase.auth().createUserWithEmailAndPassword(email, password)
.then(function(firebaseUser) {
// do something to update your UI component
// pass user object to UI component
})
.catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
Toute aide ici serait très appréciée. La seule solution de rechange que j'avais était de créer l' EventEmitter
art. Mais je suppose que c'est une façon terrible de faire les choses dans la section des services
la source
from
méthode retourne observable mais envoie une promesse comme valeur aux abonnements. :(operators
via "intuition" - j'avais tort.essaye ça:
vous pouvez trouver une référence complète à l'opérateur fromPromise ici .
la source
import 'rxjs/add/observable/fromPromise';
import { Observable } from "rxjs/Observable";
:)1 Exécution / conversion directe
Permet
from
de convertir directement une promesse précédemment créée en une observable.observable$
sera un observable à chaud qui relit efficacement la valeur des promesses pour les abonnés.Le corps des promesses est en cours d'exécution ou a déjà été résolu lors de la création de l'observable. Si la promesse intérieure a été résolue, un nouvel abonné à l'observable obtiendra immédiatement sa valeur.
2 Exécution différée sur chaque abonnement
Utiliser
defer
avec une fonction d'usine de promesse comme entrée pour différer la création et la conversion d'une promesse en observable.observable$
sera un froid observable .La différence avec
from
estdefer
qu'attend un abonné et crée ensuite une nouvelle promesse en appelant la fonction d'usine de promesse donnée. Ceci est utile lorsque vous souhaitez créer un observable mais que vous ne voulez pas que la promesse intérieure soit exécutée immédiatement. La promesse intérieure ne sera exécutée que lorsque quelqu'un souscrira à l'observable. Chaque abonné recevra également son propre nouvel observable.3 De nombreux opérateurs acceptent directement les promesses
La plupart des opérateurs de RxJS qui combinent (par exemple
merge
,concat
,forkJoin
,combineLatest
...) ou transformer observables (par exempleswitchMap
,mergeMap
,concatMap
,catchError
...) accepter des promesses directement. Si vous utilisez l'un d'eux de toute façon, vous n'avez pas à utiliserfrom
pour envelopper une promesse en premier (mais pour créer un observable froid, vous devrez peut-être encore utiliserdefer
).Vérifiez la documentation ou l' implémentation pour voir si l'opérateur que vous utilisez accepte
ObservableInput
ouSubscribableOrPromise
.La différence entre
from
etdefer
dans un exemple: https://stackblitz.com/edit/rxjs-6rb7vfla source
Vous pouvez également utiliser un sujet et déclencher sa fonction next () à partir de la promesse. Voir l'exemple ci-dessous:
Ajouter du code comme ci-dessous (j'ai utilisé le service)
Créer un utilisateur à partir du composant comme ci-dessous
la source
rxjs
.new Observable(observer => { ... observer.next() ... })
comment l'implémenter. Même s'il s'agirait d'une réimplémentation d'une fonction bien connue existante, il répondrait directement à la question et ne nuirait pas aux lecteurs.Vous pouvez également utiliser le report . La principale différence est que la promesse ne sera pas résolue ou rejetée avec impatience.
la source
Vous pouvez ajouter un wrapper autour de la fonctionnalité de promesse pour renvoyer un observable à l'observateur.
la source