我使用的是Angular 6,ngrx/store。我有这样的效果,负责更新东西。根据一些逻辑,我想分派不同的动作。如果我使用switchMap安装map ?
这就是我尝试过的,但它不起作用:
@Effect()
dispathMultipleActions$ = this.actions$.pipe(
ofType(ActionTypes.UpdateSomething),
map(() => {
const actions: Action[] = [];
const array = [1, 2, 3, 4, 5];
array.forEach(item => {
if (item > 3) {
actions.push(new DeleteAction(item));
} else {
actions.push(new ChangeAction(item));
}
});
return actions;
})
);发布于 2018-06-01 03:16:44
效果转换动作流,因此您有一个动作流作为输入和输出。在您的示例中,您将操作映射到操作数组。操作数组流不是有效的输出类型。您需要扁平化该数组,这意味着您不会将数组本身发送到输出流中,而是将其每个元素发送到输出流中。
而不是:
input: --a-------a------>
output: --[b,c]---[b,c]-->您应该执行以下操作:
input: --a-------a------>
output: --b-c-----b-c-->要将数组的可观测值展平为每个元素的可观测值,可以使用以下运算符之一
mergeMap, switchMap, exhaustMap。在大多数情况下,
mergeMap将是正确的选择。如果您想了解有关这些运算符的更多信息,请查看以下内容answer.
@Effect()
register$: Observable = this.actions$.pipe(
ofType(AuthActionTypes.REGISTER_REQUEST),
mergeMap((action: RegisterRequest) => {
// check for register request success
return [
new RegisterSuccess(),
new LoginRequest(action.payload)
]
})
);https://stackoverflow.com/questions/50629328
复制相似问题