Próbuję owinąć głowę wokół obserwowalnych. Uwielbiam sposób, w jaki obserwowalne rozwiązania problemów związanych z rozwojem i czytelnością. Jak czytam, korzyści są ogromne.
Obserwowalne na HTTP i kolekcjach wydają się być proste. Jak przekonwertować coś takiego na obserwowalny wzór.
Pochodzi z mojego komponentu usługi, aby zapewnić uwierzytelnianie. Wolę, aby działało to tak, jak inne usługi HTTP w Angular2 - z obsługą danych, procedur obsługi błędów i uzupełniania.
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;
// ...
});
Każda pomoc tutaj będzie mile widziana. Jedynym alternatywnym rozwiązaniem, jakie miałem, było stworzenie EventEmitter
s. Ale to chyba okropny sposób na robienie rzeczy w dziale usług
angular
firebase
rxjs
firebase-authentication
Krishnan Sriram
źródło
źródło
from
metoda zwraca obserwowalny, ale wysyła obietnicę jako wartość do subskrypcji. :(operators
„intuicji” - myliłem się.Spróbuj tego:
Pełne odniesienie do operatora fromPromise można znaleźć tutaj .
źródło
import 'rxjs/add/observable/fromPromise';
import { Observable } from "rxjs/Observable";
:)1 Bezpośrednie wykonanie / konwersja
Służy
from
do bezpośredniego konwertowania wcześniej utworzonej obietnicy na obserwowalne.observable$
będzie gorący do zaobserwowania który skutecznie odtworzy wartość obietnic dla subskrybentów.Ciało obietnic jest wykonywane lub zostało już rozwiązane podczas tworzenia obserwowalnego. Jeśli wewnętrzna obietnica została rozwiązana, nowy subskrybent obserwowalnego natychmiast uzyska swoją wartość.
2 Odroczone wykonanie każdego subskrypcji
Użyj
defer
z funkcją fabryki obietnic jako danych wejściowych, aby odroczyć tworzenie i przekształcanie obietnicy w obserwowalne.observable$
będzie zimno obserwowalny .Różnica
from
polega na tym, żedefer
czeka na subskrybenta, a dopiero potem tworzy nową obietnicę, wywołując daną funkcję fabryki obietnic. Jest to przydatne, gdy chcesz stworzyć obserwowalne, ale nie chcesz od razu wykonać wewnętrznej obietnicy. Wewnętrzna obietnica zostanie wykonana tylko wtedy, gdy ktoś zasubskrybuje to, co obserwowalne. Każdy subskrybent otrzyma także własny nowy obserwowalny.3 Wielu operatorów bezpośrednio przyjmuje obietnice
Większość RxJS podmioty, które łączą (np
merge
,concat
,forkJoin
,combineLatest
...) lub przekształcić obserwable (npswitchMap
,mergeMap
,concatMap
,catchError
...) przyjąć obietnice bezpośrednio. Jeśli i tak używasz jednego z nich, nie musiszfrom
najpierw zawijać obietnicy (ale aby stworzyć zimny obserwowalny , nadal będziesz musiał skorzystaćdefer
).Sprawdź dokumentację lub implementację, aby sprawdzić, czy używany operator akceptuje
ObservableInput
lubSubscribableOrPromise
.Różnica między
from
idefer
w przykładzie: https://stackblitz.com/edit/rxjs-6rb7vfźródło
Możesz także użyć podmiotu i uruchomić jego funkcję next () z obietnicy. Zobacz próbkę poniżej:
Dodaj kod jak poniżej (korzystałem z usługi)
Utwórz użytkownika z komponentu jak poniżej
źródło
rxjs
.new Observable(observer => { ... observer.next() ... })
sposób na jego wdrożenie. Mimo że byłby to reimplementacja istniejącej dobrze znanej funkcji, odpowiadałaby bezpośrednio na pytanie i nie byłaby szkodliwa dla czytelników.Możesz także użyć opcji odroczenia . Główną różnicą jest to, że obietnica nie będzie chętnie rozstrzygana ani odrzucana.
źródło
Możesz dodać opakowującą funkcjonalność obietnicy, aby zwrócić Observera obserwatorowi.
źródło