409 votes

Convertir une promesse en observable

Je suis d'essayer d'envelopper ma tête autour de la observables. J'aime la façon dont les phénomènes observables résoudre le développement et la lisibilité des questions. Comme je l'ai lu, les avantages sont immenses.

Observables sur HTTP et les collections semblent être tout droit vers l'avant. Comment puis-je convertir quelque chose comme cela pour motif observable.

C'est à partir de mon composant de service, de fournir des services d'authentification. Je préfère que cela fonctionne comme les autres services HTTP dans Angular2 - avec le soutien de données, d'erreur et de l'achèvement des gestionnaires.

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 serait appréciée. La seule solution que j'ai eu était de créer EventEmitters. Mais je suppose que c'est une terrible façon de faire les choses dans la section des services de

604voto

Guillaume Points 908

Si vous utilisez RxJS 6.0.0:

 import { from } from 'rxjs';
const observable = from(promise);
 

142voto

Godfather Points 3335

essaye ça:

 var subscription = Observable.fromPromise(
    firebase.auth().createUserWithEmailAndPassword(email, password)
);
subscription.subscribe(firebaseUser => /* Do anything with data received */,
                       error => /* Handle error here */);
 

vous pouvez trouver la référence complète à l'opérateur fromPromise ici

2voto

SHIVANG SANGHI Points 256

Vous pouvez également utiliser un Objet et de déclencher sa next() de la fonction de la promesse. Voir exemple ci-dessous:

Ajoutez le code comme ci-dessous ( j'ai utilisé de service )

class UserService {
  private createUserSubject: Subject < any > ;

  createUserWithEmailAndPassword() {
    if (this.createUserSubject) {
      return this.createUserSubject;
    } else {
      this.createUserSubject = new Subject < any > ();
      firebase.auth().createUserWithEmailAndPassword(email,
          password)
        .then(function(firebaseUser) {
          // do something to update your UI component
          // pass user object to UI component
          this.createUserSubject.next(firebaseUser);
        })
        .catch(function(error) {
          // Handle Errors here.
          var errorCode = error.code;
          var errorMessage = error.message;
          this.createUserSubject.error(error);
          // ...
        });
    }

  }
}

Création d'un Utilisateur à Partir de Composant comme ci-dessous

class UserComponent {
  constructor(private userService: UserService) {
    this.userService.createUserWithEmailAndPassword().subscribe(user => console.log(user), error => console.log(error);
    }
  }

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