Я знаю, что есть несколько доступных решений, но я не могу обернуться вокруг этой концепции. Я думаю, что было бы лучше, если бы я мог найти решение своей проблемы.
Я использую библиотеку, которая возвращает Promise
, но я хочу сохранить этот ответ (независимо от того, успешен он или нет) в Redux.
interface IResponseType {
accessToken: string;
}
const authLogin = (
username: string,
password: string
): Promise<IResponseType> => {
return new Promise(resolve => {
return resolve({ accessToken: "something" });
});
};
export const loginEpic: IEpic = (
action$: ActionsObservable<ITestLoadAction>,
store: StateObservable<IStore>
): Observable<IAction> =>
action$.ofType(TEST.REQUEST).pipe(
from(authLogin("username", "password")).pipe(
map(
(response: IResponseType): IAction => testLoadSuccessAction(response)
),
catchError(() =>
ActionsObservable.of(testLoadFailedAction("Test Loading failed."))
)
)
);
IAction
interface IAction {
type: any;
[key: string]: any;
}
IEpic
export type IEpic = Epic<IAction, IAction, IStore, EpicDependencies>;
Ошибка при наборе текста, которую я получаю
Argument of type 'Observable<IAction | ITestLoadFailedAction>' is not assignable to parameter of type 'OperatorFunction<ITestLoadAction, IAction>'.
Type 'Observable<IAction | ITestLoadFailedAction>' provides no match for the signature '(source: Observable<ITestLoadAction>): Observable<IAction>'.ts(2345)
Я создал песочницу для этого. Кажется, выдает ошибку в редакторе, но компилируется нормально. Возможно, я допустил ошибку с некоторыми конфигурациями. Но вот ссылка, если это необходимо. https://codesandbox.io/embed/agitated-mccarthy-sfq01