У меня есть фрагмент кода в моем файле эффектов аутентификации. Я хочу связать действия, но делаю это неправильно! Я продолжаю получать ошибки, как будто я не отправляю правильное действие. Я смотрю на все, что могу использовать (mergeMap, switchMap и др. c.), Но меня все сбивает с толку. Мне нужно многому научиться.
Я хочу добиться следующего: проверить, есть ли токен в локальном хранилище> если он есть, затем вызвать api с помощью службы, чтобы получить пользователя по токену> получить результат и превращаю его в правильный пользовательский объект, который я использую во внешнем интерфейсе> отправьте действие входа в систему с этим пользователем
Неисправный код:
@Effect()
init$: Observable<Action> = defer(() => {
const userToken = localStorage.getItem(environment.authTokenKey);
let observableResult = of({type: 'NO_ACTION'});
if (userToken) {
return this.auth.getUserByToken().pipe(
tap((res) => console.log('Got user by id: ', res)),
switchMap(() => merge(response => {
return this.prepareUser(response, userToken)
},
map((user: User) => {
return of(new Login(user));
}
))));
}
return observableResult;
});
...
prepareUser(response: string, token: string): User {
let res = JSON.parse(response);
let userJson = res.sub;
let user: User = {
id: userJson.id,
firstName: userJson.firstName,
lastName: userJson.lastName,
email: userJson.email,
password: userJson.password,
phone: userJson.phone,
role: userJson.role,
status: userJson.status,
_createdDate: userJson.createdDate,
_updatedDate: userJson.updatedDate,
accessToken: {idToken: token, expiresIn: 1800},
refreshToken: token,
pic: '',
_isEditMode: false,
_userId: userJson.id,
clear: () => {}
}
return user;
}
PS. Я не знаю, что делает defer (), эту часть кода написал кто-то другой, и я пытаюсь добавить нужную мне функциональность.
Большое спасибо за вашу помощь!