实际上,我有一系列步骤,并在存储效果中使用switchMap。我想从商店中获取价值并在switchMap中检索它。我尝试如下进行操作,但无法获得所需的类型值
实际结果: var客户:任意
预期结果: 客户在商店中的类型应为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”。。
非常感谢您的帮助。谢谢!
答案 0 :(得分:1)
您的代码是错误的,一旦您进入switchMap函数,您就不再处于可观察状态,因此这就是您与withLatestFrom相关的问题的原因。 SwitchMap还返回一个数组并创建一个observable,这意味着您不必使用of()。 我在评论中说的内容如下: 您需要一个新的效果和一个新的动作(loadOk)。我不知道该动作是否需要参数,因为它很难遵循。
File "/Users/c/Development/ub/app/blueprints/p/p.py", line 201, in update_existing
return jsonify(validator.errors), 422
File "/Users/c/.pyenv/versions/3.8.1/envs/ub/lib/python3.8/site-packages/cerberus/validator.py", line 464, in errors
return self.error_handler(self._errors)
File "/Users/c/.pyenv/versions/3.8.1/envs/ub/lib/python3.8/site-packages/cerberus/errors.py", line 493, in __call__
self.extend(errors)
File "/Users/c/.pyenv/versions/3.8.1/envs/ub/lib/python3.8/site-packages/cerberus/errors.py", line 397, in extend
self.add(error)
File "/Users/c/.pyenv/versions/3.8.1/envs/ub/lib/python3.8/site-packages/cerberus/errors.py", line 510, in add
error = deepcopy(error)
File "/Users/c/.pyenv/versions/3.8.1/lib/python3.8/copy.py", line 172, in deepcopy
y = _reconstruct(x, memo, *rv)
File "/Users/c/.pyenv/versions/3.8.1/lib/python3.8/copy.py", line 269, in _reconstruct
state = deepcopy(state, memo)
File "/Users/c/.pyenv/versions/3.8.1/lib/python3.8/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/c/.pyenv/versions/3.8.1/lib/python3.8/copy.py", line 229, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/c/.pyenv/versions/3.8.1/lib/python3.8/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/c/.pyenv/versions/3.8.1/lib/python3.8/copy.py", line 229, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/c/.pyenv/versions/3.8.1/lib/python3.8/copy.py", line 161, in deepcopy
rv = reductor(4)
TypeError: cannot pickle 'dict_keys' object