我正在使用node-keytar
将令牌存储在Electron应用程序中。它使用了Promise,因此我需要等待Promise解决以获取令牌。
我尝试创建的效果将调用auth服务以获取令牌,然后使用Angular http
调用将该令牌发送到后端API。这里的问题是在效果中调用服务函数。由于服务功能需要await
响应keytar
,因此整个功能必须为async
,但据我所知,尚无办法使Effect本身与{ {1}}关键字。
这里应该使用其他体系结构吗?我尝试使用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());
})
);
})
);
答案 0 :(得分:1)
这样的帮助吗?
setAccount$: Observable<Action> = this.actions$.pipe(
ofType<SetCurrentAccountPending>(AccountActions.ActionTypes.SetCurrentAccountPending),
switchMap(action => this.accountService.setCurrentAccount(action.payload)),
map(data => new AccountActions.SetCurrentAccountSuccess(data)),
catchError(error => of(new AccountActions.SetCurrentAccountFailure()))
);