【发布时间】:2020-10-09 00:22:57
【问题描述】:
其实,我有一系列的步骤,并在 store 的效果中使用 switchMap。我想从存储中获取价值并在 switchMap 中检索它。我尝试如下,但我无法获得所需的类型值
实际结果: var 客户:任何
预期结果: clients 应该是 store 中的 getClients 类型。
在代码中,我想在下一行代码中从 withLatestFrom 获取值到 switchMap。在代码中注释为 TODO。
@Effect()
loadInResponse$ = this.actions.ofType(fromActions.LOAD_IN).pipe(
withLatestFrom(this.store.select(getNqResponse)),
switchMap(([action, nq]) => {
if (nq.httpStatus === 'OK') {
withLatestFrom(this.store.select(getClients)), //TODO here
switchMap(([action,clients]) => { //TODO here
var i;
var result = [];
console.log(clients);
for (i = 0; i < clients.length; i++) {
result[i] = clients.map(a => a.no);
}
return this.cinReuseService.InCall(result).pipe(
switchMap(responseIn => [
new fromActions.LoadInSuccess(responseIn),
new fromActions.LoadService()
]),
catchError(error => {
let err: responseService = {
status: "FALSE",
message: error
}
return of(new fromActions.LoadInFail(err))
})
)
})
} else {
let err: responseService = {
status: "FALSE",
message: nq.message
}
return of(new fromActions.LoadInFail(err))
}
})
)
我收到如下错误:
“您在预期流的位置提供了 'undefined'。您可以提供 Observable、Promise、Array 或 Interable”。
非常感谢您的帮助。谢谢!
【问题讨论】:
-
您不能只在 rxjs 运算符之间添加 if。为什么不将效果拆分为多个效果?我要做的是在 if 和 else 中分派一个动作来帮助您处理问题,因此您将有一个父效果来检查状态,如果状态正常,然后分派一个执行内部操作的动作if and if it not ok dispatch an action that do what is inside the else.
-
如果你能给我指导,我是 rxjs 的新手。谢谢!
-
我更新了我的答案,因为它没有意义。
标签: javascript angular rxjs ngrx store