Я не совсем уверен, что вы этого хотите. Но вы можете преобразовать обещание в наблюдаемое с помощью Rx JS map
и применить такие операторы, как map
и catchError
, чтобы вернуть требуемую переменную success
.
import { from, of } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
tryToLogin(email: string, password: string): Observable<any> {
return from(this.auth.signInWithEmailAndPassword(email, password)).pipe(
map(firebaseUser => {
// on success
return true;
}),
catchError(error => {
// on error
return of(false); // <-- you need to return an observable from `catchError` - so use `of`
})
);
}
Теперь, поскольку вы возвращаете наблюдаемое вместо обещания, вы можете подписаться на функцию, в которой он используется.
this.someService.tryToLogin(...).subscribe(
res => console.log(res), // <-- will print `true` on successful login and `false` on failed login
error => { }
);
Если вы используете sh, чтобы получить уведомление error
вместо уведомления next
, вам нужно выбросить ошибку из блока catchError
. Вы можете использовать функцию Rx JS throwError
.
import { throwError, from } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
tryToLogin(email: string, password: string): Observable<any> {
return from(this.auth.signInWithEmailAndPassword(email, password)).pipe(
map(firebaseUser => {
// on success
return true;
}),
catchError(error => {
// on error
return throwError(false); // <-- use `throwError` to emit an `error` notification
})
);
}
Теперь ошибки будут обнаружены в обратном вызове error
this.someService.tryToLogin(...).subscribe(
res => console.log(res), // <-- will print `true` on successful login
error => console.log(error) // <-- will print `false` on failed login
);