que observables ejemplo angular firebase firebase-authentication

angular - observables - Convertir promesa a observable



rxjs observable angular (4)

desde

Use from para convertir directamente una Promesa creada previamente en un Observable.

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

Como la Promesa interna ya se ha creado (o se creará al mismo tiempo que el Observable), el cuerpo de la Promesa se está ejecutando o ya se ha resuelto a medida que se crea el Observable. Si la promesa interna ya ha resuelto, un nuevo suscriptor del observable obtendrá su valor de inmediato.

aplazar

Use defer con una función de fábrica Promesa como entrada para diferir la creación y conversión de una Promesa en un Observable.

import { defer } from ''rxjs''; // getPromise has no parameters and returns a Promise const observable = defer(getPromise) // getPromise has parameters and returns a Promise const observable = defer(() => getPromise(myParameters));

La diferencia de from es que el defer espera a un suscriptor y solo entonces crea una nueva Promesa llamando a la función de fábrica Promise dada. Esto es útil cuando desea crear un Observable pero no desea que la Promesa interna se ejecute de inmediato. La Promesa interna solo se ejecutará cuando alguien se suscriba al Observable. Cada suscriptor también obtendrá su propio Observable nuevo.

La diferencia entre y defer en un ejemplo: https://stackblitz.com/edit/rxjs-yye14a

Estoy tratando de entender mis observables. Me encanta la forma en que los observables resuelven los problemas de desarrollo y legibilidad. Mientras leo, los beneficios son inmensos.

Los observables en HTTP y las colecciones parecen ser sencillos. ¿Cómo puedo convertir algo como esto en un patrón observable?

Esto es de mi componente de servicio, para proporcionar autenticación. Prefiero que esto funcione como otros servicios HTTP en Angular2, con soporte para manejadores de datos, errores y finalización.

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

Cualquier ayuda aquí sería muy apreciada. La única solución alternativa que tuve fue crear EventEmitter s. Pero supongo que es una forma terrible de hacer cosas en la sección de servicios


Si está utilizando RxJS 6.0.0:

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


También puede usar un Asunto y activar su función next () desde la promesa. Ver muestra a continuación:

Agregue el código como a continuación (utilicé el servicio)

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

Crear usuario desde componente como a continuación

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


prueba esto:

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

Puede encontrar una referencia completa del operador de Promise here