Это одна из причин, почему я не предпочитаю смешивать обещания и наблюдаемые, хотя это не хак или обходной путь.
Если вы все еще хотите sh, чтобы преобразовать обещание в наблюдаемое Вы можете сделать это, используя Rx JS from
(Rx JS v6.0.0 +). Из документов:
Создает Observable из массива, объекта массива, Promise, повторяемого объекта или объекта Observable.
If метод then
или catch
, если он предоставлен обещанию, тогда оператор from
вернет наблюдаемое обещание, возвращенное соответствующим методом, вместо исходного обещания. Было бы лучше удалить их при конвертации.
Попробуйте следующее
Сервис
import { from } from 'rxjs';
login(email: string, password: string) {
return from(firebase.auth().signInWithEmailAndPassword(email, password));
}
Компонент
login() {
let authObs: Observable<any>; // <-- use 'any' instead of a specific type
authObs = this.authService.login(this.email, this.password);
authObs.subscribe(
resData => {
console.log('Response Data:', resData);
this.router.navigateByUrl('/home');
},
errRes => {
console.log('Error Response:', errRes);
}
);
}
Pre Rx JS v6.0.0, пожалуйста, обратитесь здесь .