Я пытаюсь обернуть голову вокруг наблюдаемых. Мне нравится, как наблюдаемые решения решают проблемы развития и читабельности. Как я читаю, преимущества огромны.
Наблюдаемые данные по HTTP и коллекциям кажутся простыми. Как я могу преобразовать что-то вроде этого в наблюдаемую картину.
Это из моего сервисного компонента, чтобы обеспечить аутентификацию. Я бы предпочел, чтобы это работало как другие HTTP-сервисы в Angular2 - с поддержкой данных, обработчиков ошибок и завершений.
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;
// ...
});
Любая помощь здесь будет высоко ценится. Единственное альтернативное решение, которое у меня было, было создать EventEmitter
s. Но я думаю, что это ужасный способ сделать что-то в разделе услуг
angular
firebase
rxjs
firebase-authentication
Кришнан Шрирам
источник
источник
from
метод возвращает наблюдаемый, но он отправляет обещание в качестве значения для подписок. :(operators
помощью "интуиции" - я ошибся.попробуй это:
Вы можете найти полную ссылку на оператор fromPromise здесь .
источник
import 'rxjs/add/observable/fromPromise';
import { Observable } from "rxjs/Observable";
:)1 Прямое выполнение / преобразование
Используйте
from
для прямого преобразования ранее созданного обещания в наблюдаемое.observable$
будет горячей наблюдаемой, которая эффективно воспроизводит ценность обещаний для подписчиков.Тело обещаний выполняется или уже было выполнено при создании наблюдаемого. Если внутреннее обещание было выполнено, новый подписчик на наблюдаемое немедленно получит его значение.
2 Отложенное выполнение при каждой подписке
Используйте
defer
функцию фабрики обещаний в качестве входных данных, чтобы отложить создание и преобразование обещания в наблюдаемое.observable$
будет холодной наблюдаемой .Разница в
from
том, чтоdefer
ждет подписчика и только потом создает новое обещание, вызывая данную функцию фабрики обещаний. Это полезно, когда вы хотите создать наблюдаемое, но не хотите, чтобы внутреннее обещание выполнялось сразу. Внутреннее обещание будет выполнено только тогда, когда кто-то подпишется на наблюдаемое. Каждый подписчик также получит свою собственную новую наблюдаемую.3 Многие операторы принимают обещания напрямую
Большинство RxJS операторов , которые сочетают в себе (например
merge
,concat
,forkJoin
,combineLatest
...) или преобразовать Наблюдаемые (напримерswitchMap
,mergeMap
,concatMap
,catchError
...) принимает обещания напрямую. В любом случае, если вы используете один из них, вам не нужноfrom
сначала оборачивать обещание (но для создания наблюдаемой простуды вам все равно придется использоватьdefer
).Проверьте документацию или реализацию, чтобы увидеть, принимает
ObservableInput
ли используемый вами оператор илиSubscribableOrPromise
.Разница между
from
иdefer
в примере: https://stackblitz.com/edit/rxjs-6rb7vfисточник
Вы также можете использовать Subject и вызывать его функцию next () из обещания. Смотрите образец ниже:
Добавьте код, как показано ниже (я использовал сервис)
Создать пользователя из компонента, как показано ниже
источник
rxjs
.new Observable(observer => { ... observer.next() ... })
способ его реализации. Несмотря на то, что это будет переопределение существующей известной функции, оно напрямую ответит на вопрос и не будет вредным для читателей.Вы также можете использовать отсрочку . Основное отличие заключается в том, что обещание не будет решаться или отказываться с нетерпением.
источник
Вы можете добавить обертку вокруг функциональности обещания, чтобы вернуть Observable наблюдателю.
источник