Я использую node-keytar
для хранения токенов в приложении Electron. Он использует обещания, поэтому мне нужно дождаться разрешения Обещания, чтобы получить токен.
Эффект, который я пытаюсь создать, вызовет службу аутентификации для получения токена, а затем отправит этот токен в бэкэнд-API с помощью вызова Angular http
. Проблема здесь заключается в вызове сервисной функции в Effect. Поскольку сервисной функции нужно await
, ответ keytar
, вся функция должна быть async
, но, насколько я понимаю, невозможно сделать сам эффект асинхронным с ключевым словом async
.
Есть ли другая архитектура, которую я должен использовать здесь? Я пытался использовать .then()
и возвращать успешное действие изнутри, но это приводит к ошибкам типа.
Эффект (который в настоящее время имеет ошибку Type Observable<{}> is not assignable to type Observable<Action>
):
setAccount$: Observable<Action> = this.actions$.pipe(
ofType<SetCurrentAccountPending>(AccountActions.ActionTypes.SetCurrentAccountPending),
switchMap(action => {
return this.accountService.setCurrentAccount(action.payload).pipe(
map(
() => new AccountActions.SetCurrentAccountSuccess(action.payload)
),
catchError(() => {
return of(new AccountActions.SetCurrentAccountFailure());
})
);
})
);
Сервисная функция:
async setCurrentAccount(id: string) {
const password = await AccountHandler.getPasswordFromManager(id);
const body = {password: password};
return this.httpClient.post(environment.localApi + '/accounts/' + id, body);
}