如何使ngrx效果等待异步功能

时间:2019-04-08 19:04:35

标签: redux ngrx ngrx-effects

我正在使用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());
          })
        );
    })
  );

1 个答案:

答案 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()))
  );