gpt4 book ai didi

javascript - 如何在 ngrx/effect (redux-observable) 中分派(dispatch)多个 Action ?

转载 作者:太空狗 更新时间:2023-10-29 18:03:25 25 4
gpt4 key购买 nike

我正在使用 Angular 6,ngrx/store。我有负责更新东西的效果。取决于我想分派(dispatch)不同 Action 的一些逻辑。如果我使用 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;
})
);

最佳答案

效果转换 Action 流,因此您有 Action 流作为输入和输出。在您的示例中,您将一个操作映射到一个操作数组。操作数组流不是有效的输出类型。您需要展平该数组,这意味着您不会将数组本身发射到输出流中,而是将其每个元素发射到输出流中。

代替:

input:  --a-------a------>
output: --[b,c]---[b,c]-->

你应该这样做:

input:  --a-------a------>
output: --b-c-----b-c-->

为了将数组的 Observable 扁平化为每个元素的 Observable,您可以使用操作符之一 mergeMapswitchMapexhaustMap。在大多数情况下,mergeMap 将是正确的选择。如果您想了解有关这些运算符的更多信息,请查看此 answer .

@Effect()
register$: Observable<Action> = this.actions$.pipe(
ofType(AuthActionTypes.REGISTER_REQUEST),
mergeMap((action: RegisterRequest) => {
// check for register request success
return [
new RegisterSuccess(),
new LoginRequest(action.payload)
]
})
);

关于javascript - 如何在 ngrx/effect (redux-observable) 中分派(dispatch)多个 Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50629328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com