Estou tentando envolver minha cabeça em observáveis. Adoro a maneira como os observáveis resolvem problemas de desenvolvimento e legibilidade. Enquanto leio, os benefícios são imensos.
Observáveis em HTTP e coleções parecem ser diretos. Como posso converter algo assim em padrão observável.
Isso é do meu componente de serviço, para fornecer autenticação. Eu prefiro que isso funcione como outros serviços HTTP no Angular2 - com suporte para manipuladores de dados, erros e conclusão.
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;
// ...
});
Qualquer ajuda aqui seria muito apreciada. A única solução alternativa que tive foi criar EventEmitter
s. Mas acho que é uma maneira terrível de fazer as coisas na seção de serviços
angular
firebase
rxjs
firebase-authentication
Krishnan Sriram
fonte
fonte
from
método retornando observável, mas está enviando promessa como valor para assinaturas. :(operators
"intuição" - estava errado.tente isto:
Você pode encontrar uma referência completa ao operador fromPromise aqui .
fonte
import 'rxjs/add/observable/fromPromise';
import { Observable } from "rxjs/Observable";
:)1 Execução / Conversão Direta
Use
from
para converter diretamente uma promessa criada anteriormente em um observável.observable$
será um observável quente que efetivamente repete o valor prometido aos assinantes.O organismo de promessas está sendo executado ou já foi resolvido quando o observável é criado. Se a promessa interna tiver sido resolvida, um novo assinante do observável receberá seu valor imediatamente.
2 Execução Adiada em Cada Assinatura
Use
defer
com uma função de fábrica de promessas como entrada para adiar a criação e conversão de uma promessa em um observável.observable$
será um observável frio .A diferença
from
é quedefer
espera por um assinante e só então cria uma nova promessa chamando a função de fábrica de promessa fornecida. Isso é útil quando você deseja criar um observável, mas não deseja que a promessa interna seja executada imediatamente. A promessa interior só será executada quando alguém se inscrever no observável. Cada assinante também terá seu próprio novo observável.3 Muitos operadores aceitam promessas diretamente
A maioria dos operadores RxJS que combinam (por exemplo
merge
,concat
,forkJoin
,combineLatest
...) ou transformar observáveis (por exemploswitchMap
,mergeMap
,concatMap
,catchError
...) aceitar promessas diretamente. Se você estiver usando um deles de qualquer maneira, não precisaráfrom
primeiro cumprir uma promessa (mas para criar um observável frio, você ainda precisará usardefer
).Verifique a documentação ou implementação para ver se o operador que você está usando aceita
ObservableInput
ouSubscribableOrPromise
.A diferença entre
from
edefer
em um exemplo: https://stackblitz.com/edit/rxjs-6rb7vffonte
Você também pode usar um Assunto e acionar sua próxima função () da promessa. Veja a amostra abaixo:
Adicione código como abaixo (usei serviço)
Criar usuário do componente como abaixo
fonte
rxjs
.new Observable(observer => { ... observer.next() ... })
maneira de implementá-lo. Mesmo que fosse uma reimplementação da função conhecida existente, responderia diretamente à pergunta e não seria prejudicial aos leitores.Você também pode usar adiar . A principal diferença é que a promessa não vai resolver ou rejeitar avidamente.
fonte
Você pode adicionar um wrapper à funcionalidade de promessa para retornar um Observable ao observador.
fonte