В настоящее время я работаю над реализацией приложения в Ionic 4 / Angular 8 и хочу обработать состояние через NgRx Store и Effects. В настоящее время я работаю над частью «Аутентификация» в моей настройке NgRx и попал в ловушку.
Я пытаюсь реализовать свое приложение с помощью MongoDB Stitch (серверная часть как сервис), и я проходил через Документычтобы узнать больше о том, как работает часть Auth (email / pwd auth). Я обнаружил, что метод loginWithCredentials возвращает Promise.
Однако NgRx-эффекты требуют от нас построения цепочки Observable, поэтому я попытался преобразовать возвращаемое Promise в Observable, используя метод from () из rxjs, но я получаю сообщение об ошибке и не смогнайти способ обойти это. Может кто-нибудь помочь?
Код моего эффекта выглядит следующим образом:
@Effect()
authLogin = this.actions$.pipe(
ofType( AuthActions.LOGIN_START ),
exhaustMap( (authData: AuthActions.LoginStart) => {
this.stitchAppClient = Stitch.defaultAppClient;
const credential = new
UserPasswordCredential(authData.payload.email,
authData.payload.password);
from(this.stitchAppClient.auth.loginWithCredential(credential));
}).pipe(
catchError(error => {
// ...
return of();
}),
map((resData: StitchUser) => {
return new AuthActions.LoginSuccess({
email: resData.profile.email,
userId: resData.id
});
})
)
);
Действие LOGIN_START просто получает адрес электронной почты и пароль для запуска процесса входа в систему.
export class LoginStart implements Action {
readonly type = LOGIN_START;
constructor( public payload: { email: string, password: string } ) {}
}
export type AuthActions = LoginStart;
Строка this.stitchAppClient.auth.loginWithCredential (credential) возвращает строку Promise в соответствии с StitchDocs. Тип StitchUser - это объект JS с полями, такими как идентификатор пользователя (строка), профиль пользователя (другой объект JS с электронной почтой и другими вещами) и другие пары ключ: значение, сгенерированные Stitch.
Даже до компиляциикод, с которым я получаю сообщение об ошибке в своей среде IDE (VS Code), также появляется при попытке скомпилировать приложение:
error TS2345: Argument of type '(authData: LoginStart) => void' is not assignable to parameter of type '(value: LoginStart, index: number) => ObservableInput<any>'.
[ng] Type 'void' is not assignable to type 'ObservableInput<any>'.
Есть идеи? Спасибо!